如何管理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;
}
}
}
注:我有多年的开发经验,但对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;
}
}
}