我正在使用团结进行游戏开发的在线课程,教师有时可能会模糊不清。我的印象是使用gameobject与使用游戏对象名称相同(在这种情况下它是MusicPlayer),但是当我尝试用gameobject实例替换MusicPlayer实例时,我得到了错误CS0246:类型或命名空间名称`gameobject '无法找到。您是否缺少using指令或程序集引用?我只是想了解两者之间的区别。提前谢谢。
memmap
这是我收到错误的代码:
In [8]: data_2d.shape
Out[8]: (16777216, 50)
答案 0 :(得分:3)
gameObject
和GameObject
之间存在差异。注意大写的" 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'));
}
是昂贵的。