一、在游戏开发中最常用的一种框架XXXManager(单例)
- XXXManager是场景中唯一的,传统的方式为声明一个公开的属性,属性类型为自身,在Awake时对自身引用指定对象为自身。
public class Test1 : MonoBehaviour {
private static Test1 instance;
public static Test1 Instance
{
get { return instance; }
}
private void Awake()
{
instance = this;
}
}
- 优点:简单 缺点:在Awake时不可以调用
二、优化XXXManager
- XXXManager是场景中唯一的,并且XXXManager都有一个自身类型的变量。可以做一个XXXManager的父类。(思路:父类做一个泛型,然后约束泛型为自身类型和子类)
- MonoSingleton代码
public class MonoSingleton<T> : MonoBehaviour where T : MonoSingleton<T> {
private static T instance;
public static T Instance {
get {
if (instance==null)
{
instance = FindObjectOfType<T>();
if (instance==null)
{
instance = new GameObject(typeof(T).ToString()).AddComponent<T>();
}
}
return instance;
}
}
private void Awake()
{
Initialize();
}
public virtual void Initialize()
{
}
}
- XXXManager代码
public class Ui_Manager : MonoSingleton<Ui_Manager> {
public void Test()
{
}
}
- 调用
public class GameControl : MonoBehaviour {
private void Start()
{
Ui_Manager.Instance.Test();
}
}