在Unity中哪里附加全局脚本?


14

就Unity中的Iknow而言,每个脚本都必须附加到一个对象。但是全局脚本是怎么回事?例如,在类似俄罗斯方块的游戏中,应该将元素生成器和移动器脚本附加到哪个对象?还是元素应自行处理其运动?是否有针对此问题的最佳实践?

Answers:


14

要扩展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属性编辑器进行操作。


感谢您的回答。我同意这感觉很奇怪!并认为这方面的信息很少。您是否可以推荐一些阅读材料,以了解如何最好地统一使用这些“经理”类型的课程?
UpTheCreek 2015年

@UpTheCreek:我真的什么都不知道。几年前,我们大部分时间都在解决这个问题,但是我们当前的项目是在定制技术上进行的,所以这些天我对Unity最佳实践已经过时了。抱歉。
肖恩·米德迪奇

3

只需创建一个放置该脚本的管理器对象即可。也许为您为其分配的脚本制作一个静态变量,Awake以便您可以轻松地对其进行全局访问。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.