liangxiegame / QFramework

Godot/Unity3D System Design Architecture
https://qframework.cn
MIT License
4.41k stars 774 forks source link

关于PersistentMonoSingleton的DontDestroyOnLoad没被调用的问题 #123

Open yyyysh opened 10 months ago

yyyysh commented 10 months ago

Snipaste_2023-12-16_10-28-24 图中在其他mono脚本里调用继承了PersistentMonoSingleton的脚本时 该脚本的Awake方法还没执行,这时候从场景上FindObjectOfType得到instance 等到了该脚本Awake方法执行时 mInstance == null 导致DontDestroyOnLoad方法不会被执行 是不是把 DontDestroyOnLoad(transform.gameObject); 这句从if里提出来比较好?

  protected virtual void Awake()
        {
            if (!Application.isPlaying)
            {
                return;
            }

            if (mInstance == null)
            {
                mInstance = this as T;
                DontDestroyOnLoad(transform.gameObject);
                mEnabled = true;
            }
            else
            {
                if (this != mInstance)
                {
                    Destroy(this.gameObject);
                }
            }
        }