我是Unity3d和JS脚本的新手,我需要帮助来简化我正在开发的应用程序中的场景和代码这是我的场景的概念:
有一个相机,通过层屏蔽看到三个平面 . 还有一种材料用作交换纹理,以及在每个平面上分别运行此交换的脚本 . 为了运行这个脚本,我使用带有滚动列表按钮的GUI,所以当按下button1时,摄像头只能看到plane1,而script1会在这个平面上运行纹理材质1 . 按下相应的按钮,在其他2个平面上也会发生相同的情况 . 您可以在附图1中查看此概念:
我需要你的帮助,是通过只保留一个相机的平面来简化这个场景,并附加相应的脚本(1,2,3等),材料作为纹理(1,2,3等)当玩家在运行时触摸相应的GUI按钮时,同一平面 . 需要提一下的是,GUI按钮位于附加到空GameObject的名为“GUI”的脚本上,而我需要动态附加的脚本和材料位于名为“Animator”的GameObject上,作为Camera的子项 . 您可以在附图2中查看此概念 .
我相信这个功能可以通过使用例如“gameObject.AddComponent(”myScript“)”,但由于我是一个菜鸟,我无法实现它 . 此外,我不知道如何在运行时在这个平面上应用不同的材料 . 所以我需要一些帮助和一个编码示例,因为我发现很难只看到提示而没有看到一个例子 .
感谢大家抽出时间阅读这篇文章,希望有人能够帮助我解决这个问题 .
Edit 1
好吧,为了让任何愿意帮助的人更加全面,并且随后我的答案得到了帮助,我发布了Hierarchy和Inspector的截图,以及Unity项目的代码片段 .
在图3中,Hierarchy的视图,我显示,脚本“ShowAnimation”在gameObject“Animation_Buttons_Controller”上 . 通过这个脚本,我想访问例如父对象游戏对象“AnimationCamera”中的gameObject子“Animator2inScene2” .
在图像4中,Inspector的视图,我显示了材质元素“Texture_Animator2_Material”,以及应该仅在运行时添加到此gameObject上的脚本“ScriptTextureAnimator2” .
以下是脚本“ShowAnimation.js”中的代码片段,它必须访问gameObject子元素“Animator2inScene2”并在此gameObject子元素上添加材质元素“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()”
我知道,我错过了一些对于编译至关重要的东西,但那可能是什么呢?请查看我的编码推荐 . 谢谢 .