Unity Singleton Manager类
在Unity中,有什么好方法可以创建一个单例游戏管理器,它可以作为带有静态变量的全局类作为全局类在任何地方访问,该类将向每个提取那些常量的类吐出相同的常量值?在Unity中实现它的方式是什么?我是否必须将其附加到GameObject?可以只存在于文件夹中而没有视觉上出现在场景中吗?
回答:
像往常一样:这取决于。我使用两种单例,即附加到组件的组件GameObject
和不衍生自的独立类MonoBehaviour
。IMO的总体问题是如何将实例绑定到场景,游戏对象的生命周期,……并且不要忘记,有时候拥有一个组件会更方便,尤其是引用其他MonoBehaviour
对象更容易,更安全。
- 有些类只需要提供一些值,例如config类,该类需要在调用时从持久层加载设置。我将这些课程设计为简单的单例。
- 另一方面,某些对象需要知道何时启动场景,即
Start
调用场景或必须以Update
其他方法执行动作。然后,我将它们实现为组件,并将它们附加到可以加载新场景的游戏对象上。
我设计了基于组件的单例(类型2),它分为两部分:GameObject
名为的持久性(Main
包含所有组件)和MainComponentManager
用于管理它的平面单例(类型1)。一些演示代码:
public class MainComponentManger { private static MainComponentManger instance;
public static void CreateInstance () {
if (instance == null) {
instance = new MainComponentManger ();
GameObject go = GameObject.Find ("Main");
if (go == null) {
go = new GameObject ("Main");
instance.main = go;
// important: make game object persistent:
Object.DontDestroyOnLoad (go);
}
// trigger instantiation of other singletons
Component c = MenuManager.SharedInstance;
// ...
}
}
GameObject main;
public static MainComponentManger SharedInstance {
get {
if (instance == null) {
CreateInstance ();
}
return instance;
}
}
public static T AddMainComponent <T> () where T : UnityEngine.Component {
T t = SharedInstance.main.GetComponent<T> ();
if (t != null) {
return t;
}
return SharedInstance.main.AddComponent <T> ();
}
现在,其他想要注册为Main
组件的单例看起来像:
public class AudioManager : MonoBehaviour { private static AudioManager instance = null;
public static AudioManager SharedInstance {
get {
if (instance == null) {
instance = MainComponentManger.AddMainComponent<AudioManager> ();
}
return instance;
}
}
以上是 Unity Singleton Manager类 的全部内容, 来源链接: utcz.com/qa/410772.html