单例模式 与 MonoBehaviour的冲突点
单例模式 + MonoBehaviour 保持单例的快速解决方案
就是自己创建一个空对象,然后把脚本挂在上去就行了,之后你就别自己挂载该脚本就行了
一般写法
public class AgentMoNo : MonoBehaviour
{private static AgentMoNo instance;/// <summary>/// 单例模式/// </summary>public static AgentMoNo Instance{get{if (instance == null){GameObject obj = new GameObject("AgentMoNo");instance = obj.AddComponent<AgentMoNo>();DontDestroyOnLoad(obj);}return instance;}}
}
优化写法
public class AgentMoNo : MonoBehaviour {private static AgentMoNo instance;/// <summary>/// 单例模式+实例化脚本以及对象 == 在Awake中调用Creatinstance()的逻辑/// 因为继承MonoBehaviour的类就必须挂载在一个场景中的物体上才会开启生命周期,且可以为多个对象挂载/// 而单例模式与这一特性冲突,所以就干脆创建一个物品并挂在该脚本,以保持唯一且持久的特性/// </summary>public static AgentMoNo Instance => instance ??= Creatinstance();public static AgentMoNo Creatinstance() {GameObject obj = new GameObject("AgentMoNo");instance = obj.AddComponent<AgentMoNo>();DontDestroyOnLoad(obj);return instance;}