如何管理Unity3D Instances/singletons

How to manage Unity3D Instances/singletons

注:我有多年的开发经验,但对Unity完全是个初学者

我想知道跨场景管理游戏对象的最佳做法是什么

如您所知,每个场景都有一个包含实际实例的层次结构树,假设我有一个 ScoreManager 游戏对象,我只想实例化一次,但我想避免单例模式。 (因为这是一种不好的做法)。假设 ScoreManager 需要 LevelsManager 的实例等等...

我熟悉的一个解决方案是 依赖注入,但我确实找到了任何使用它的教程。我看到的所有教程都在层次结构树中实例化游戏对象,通过 public 属性... .

那么,你有没有一个你喜欢的好习惯?

谢谢!

编辑:

@Shogunivar suggested DontDestroyOnLoad,问题在于你应该在第一个场景层次结构中只放置一个 GameObject,例如 WelcomeScene,它将在未来一直存在已加载的场景。

问题是您可能想在 Level01Scene 上测试(按播放)说需要此 GameObject 存在,但它不存在,您必须首先加载WelcomeScene 在 Heirarchy 中有此 GameObject。

将相同的游戏对象也放在 Level01Scene 上会导致它被复制,并且永远不会破坏...

要解决这种重复,唯一的解决方案(据我所知)是使用 Singleton。不是"the-end-of-the-world",而是这道题的目的。处理此问题的任何其他最佳实践(在 Unity 中)?

Zenject真厉害。他们的 Github 页面上也有一些很好的文档,解释了很多。这是管理全局绑定的好方法。

但是,如果您想要更简单的东西,您可以从单例继承 class。大多数人会反对它,但它确实有效,而且超级简单。

public class SingletonController : MonoBehaviour {
 public static SingletonController Instance;

 private void Awake() {
  if (Instance != null) {
   Destroy(gameObject);
  } else {
   Instance = this;
  }
 }
}