Answers:
要扩展Tetrad的答案,请考虑以下脚本:
public class GameSystem : MonoBehavior
{
private GameSystem m_Instance;
public GameSystem Instance { get { return m_Instance; } }
void Awake()
{
m_Instance = this;
}
void OnDestroy()
{
m_Instance = null;
}
void Update()
{
// global game update logic goes here
}
void OnGui()
{
// common GUI code goes here
}
// etc.
}
然后,您可以在场景的根目录中创建一个名为“ GameSystem”的对象。它仅有的组件将是内置的转换组件(将其位置设置为原点,将其旋转设置为标识,并将其比例设置为1;这并不重要,但这是一种很好的做法)。将GameSystem组件附加到该对象。
现在,您只需使用GameSystem.Instance.blah()就可以访问全局对象。它的事件处理程序方法是从MonoBehavior派生并作为组件存在的,因此它会被Unity自动调用。您可以向其中添加引用其他游戏对象或组件的字段,并将其连接到Unity对象层次结构视图中。
是的,这有点“怪异”。必须创建始终只是全局单例的对象(甚至具有转换)可能会有点脏。这是Unity创建全局对象的条件,该对象可以获取更新消息,并且可以使用默认的Unity属性编辑器进行操作。