【发布时间】:2014-09-13 23:42:41
【问题描述】:
我是 Unity3d 和 JS 脚本的新手,我需要帮助来简化我正在开发的应用程序中的场景和代码这是我的场景的概念:
有一个相机,可以看穿图层蒙版,三个平面。还有一种材质充当交换纹理,以及在每个平面上分别运行此交换的脚本。为了运行这个脚本,我使用了一个带有滚动列表按钮的 GUI,所以当按下 button1 时,相机只能看到 plane1,并且 script1 在这个平面上运行纹理 material1。通过按下相应的按钮,在其他 2 个平面上也会发生同样的情况。您可以在附图 1 中了解这个概念:
我需要你的帮助,是通过只保留一个平面供相机看到,并附加相应的脚本(1、2、3 等)、材质作为纹理(1、2、3)来简化这个场景等)在同一平面上,当玩家在运行时触摸相应的 GUI 按钮时。需要提一下,虽然 GUI 按钮位于一个名为“GUI”的脚本上,该脚本附加到一个空的游戏对象,而我需要动态附加的脚本和材料位于一个名为“动画师”的游戏对象上,作为相机的子对象。您可以在附图 2 中了解这个概念。
我相信这个功能可以通过使用例如来实现。 "gameObject.AddComponent ("myScript")" ,但由于我是菜鸟,我无法实现它。此外,我不知道如何在运行时在这个平面上应用不同的材料。所以我可能需要一些帮助和一个编码示例,因为我发现很难在没有看到示例的情况下仅遵循提示。
感谢大家花时间阅读这篇文章,希望有人能在这件事上帮助我。
编辑 1
好吧,为了让任何愿意帮助的人更全面,并在他们的回答之后帮助我,我发布了 Hierarchy 和 Inspector 的屏幕截图,以及 Unity 项目的代码 sn-p。
在图 3,层次结构视图中,我展示了脚本“ShowAnimation”位于游戏对象“Animation_Buttons_Controller”上。通过这个脚本,我想访问例如父游戏对象“AnimationCamera”中的游戏对象子“Animator2inScene2”。
在图 4 中,Inspector 视图中,我展示了材质元素“Texture_Animator2_Material”和脚本“ScriptTextureAnimator2”,该脚本仅应在运行时添加到此游戏对象上。
以下是脚本“ShowAnimation.js”中的代码 sn-p,它必须访问子游戏对象“Animator2inScene2”并在该子游戏对象上添加材质元素“Texture_Animator2_Material”和脚本“ScriptTextureAnimator2”:
if (GUI.Button (Rect (2,2,100,20), "PlayAnimation2"))
{
var addScriptOnPlane2 : GameObject[] = GameObject.FindGameObjectsWithTag("Animator");
//for(var addTextureScript2 : GameObject in addScriptOnPlane2)
if(addScriptOnPlane2)
{
// Adds the script named ScriptTextureAnimator2 to the game object child "Animator2inScene2"
gameObject.AddComponent("ScriptTextureAnimator2");
// Adds the script named Texture_Animator2_Material to the game object child "Animator2inScene2"
var addMaterial : Material;
addMaterial = Resources.Load("Materials/Materials/Texture_Animator2_Material",typeof(Material)) as Material;
}
}
问题是在播放时,我在 gui 按钮上没有任何功能,并且在控制台中出现以下错误:
" NullReferenceException:对象引用未设置为对象的实例 ScriptTextureAnimator2.FixedUpdate()"
我知道,我错过了一些对编译至关重要的东西,但那可能是什么?请查看并发布关于我的编码的建议。谢谢。
【问题讨论】:
标签: android unity3d unityscript