Unity(对象名称与游戏对象)

时间:2017-07-09 02:15:53

标签: c# unity3d scripting monodevelop

我正在使用团结进行游戏开发的在线课程,教师有时可能会模糊不清。我的印象是使用gameobject与使用游戏对象名称相同(在这种情况下它是MusicPlayer),但是当我尝试用gameobject实例替换MusicPlayer实例时,我得到了错误CS0246:类型或命名空间名称`gameobject '无法找到。您是否缺少using指令或程序集引用?我只是想了解两者之间的区别。提前谢谢。

memmap

这是我收到错误的代码:

In [8]: data_2d.shape  
Out[8]: (16777216, 50)

1 个答案:

答案 0 :(得分:3)

gameObjectGameObject之间存在差异。注意大写的" G"在第二个。

GameObject是一个班级。您可以像这样创建它的实例:

GameObject myobject = new GameObject("PhilipBall");

或者您可以将其设为公共变量并从编辑器中分配:

public  GameObject myobject;

gameObject是从GameObject创建的变量。它被声明为上面的myobject变量示例。

您无法看到它的原因是因为它是在名为Component的类中声明的。然后,一个名为Behaviour的类继承自Component类。另一个名为MonoBehaviour的类继承自Behaviour类。最后,当您执行MonoBehaviour时,名为MusicPlayer的脚本将继承public class MusicPlayer : MonoBehaviour。因此,您继承了gameObject变量并可以使用它。

gameObject类的public static gameobject instance = null;变量类型,用于引用此脚本附加到的GameObject。

  

我想知道为什么我不能使用gameObject并且必须使用名称   gameObject

你实际上可以这样做。只需将public static GameObject instance = null;替换为instance = this;,然后将instance = this.gameObject;替换为public class MusicPlayer : MonoBehaviour { public static GameObject instance = null; void Awake() { if (instance != null) { Destroy(gameObject); Debug.Log("Duplicate MusicPlayer Destroyed"); } else { instance = this.gameObject; GameObject.DontDestroyOnLoad(gameObject); Debug.Log("Original MusicPlayer Created!"); } } }

MusicPlayer

使用此功能时,您指的是this.gameObject这个脚本。当您使用public static GameObject instance = null;时,您指的是此脚本附加到此GameObject。

为什么教师不会使用MusicPlayer

这是因为他们想要在运行时访问GetComponent脚本变量,函数。他们不需要GameObject。现在,可以使用GameObject完成此操作,但您必须执行额外的步骤,例如使用MusicPlayer.instance.runFunction(); 以使用变量或调用该脚本中的函数。

例如,你有一个名为" runFunction"的函数。在那个脚本中你想要调用它。在第一个例子中,您可以这样做:

MusicPlayer.instance.GetComponent<MusicPlayer>().runFunction();

使用第二个例子,你必须这样做:

GetComponent

这是一个很大的区别,并且还注意public function transactions() { $transactions = Transaction::all(); return view('admin.transaction', compact('transactions')); } 是昂贵的。