这个是脚本执行顺序问题。
因为你没执行脚本执行顺序。你这个是两个类,例如A和B类。A类是单例模式,,但是A类的Awake还没执行,是你的B类的Awake先执行了。这个时候拿到的必然就是空了。。
解决办法有三种,
第一种:指定脚本的执行顺序,,
第二种:不要在Awake中获取其他类的单例模式,而是延迟到Start之后再来拿。
第三种:Instance是get 属性,有另外一个m_Instance判断是否为空,不是空就返回,否则新建一个对象,给对象加入自身脚本,并赋值给m_Instance,然后返回m_Instance,例如下方代码:
public class Test : MonoBehaviour {
private static Test m_Instance;
public static Test Instance {
get {
if (m_Instance == null) {
m_Instance = new GameObject().AddComponent<Test>();
}
return m_Instance;
}
}
}
但是第三个方案有个缺陷。不能监视面板上面赋值,因为是在Instance的get属性中实例化的。序列化的值没保存下来。因为不是同一个实例