Some objects were not cleaned up when closing the scene. (Did you spawn new GameObjects from OnDestroy?) 錯誤


項目在切換場景或者是關閉Unity運行界面的時候,出現Some objects were not cleaned up when closing the scene. (Did you spawn new GameObjects from OnDestroy?)錯誤。原因是我在一個不銷毀的單利里面,定義了一個事件,在外部去注冊這個事件。

        /// <summary>
        /// 數據改變通知的事件
        /// </summary>
        public GameDataDel GameDataHandle;
       public static SaveGameData _instance;
        public static SaveGameData Instance
        {
            get
            {
                if (_applicationIsQuitting)
                {
                    return null;
                }
                if (_instance == null)
                {
                    GameObject go = new GameObject("SaveGameData");
                    SaveGameData saveGameData = go.AddComponent<SaveGameData>();
                    DontDestroyOnLoad(go);
                    _instance = saveGameData;
                }
                return _instance;
            }
        }

外面事件的注冊

        private void OnEnable()
        {
            Ctr_PlayerInfo.OnShowLifeNumEve += OnFreshLifeNum;
            SaveGameData.Instance.GameDataHandle += OnFresh;
        }

        private void OnDisable()
        {
            if (Ctr_PlayerInfo.OnShowLifeNumEve != null)
            {
                Ctr_PlayerInfo.OnShowLifeNumEve -= OnFreshLifeNum;
            }
            if (SaveGameData.Instance!= null)
            {
                SaveGameData.Instance.GameDataHandle -= OnFresh;
            }

        }

當我退出時,應用程序對象會以隨機順序被銷毀。因此,如果gameManager實例在任何OnDisable()方法之前被銷毀,那么在應用程序退出導致錯誤后,將創建gameManager類的新實例!!為了解決這個錯誤,我做了以下修改:

      public static SaveGameData _instance;
        private static bool _applicationIsQuitting = false;
        public static SaveGameData Instance
        {
            get
            {
                if (_applicationIsQuitting)
                {
                    return null;
                }
                if (_instance == null)
                {
                    GameObject go = new GameObject("SaveGameData");
                    SaveGameData saveGameData = go.AddComponent<SaveGameData>();
                    DontDestroyOnLoad(go);
                    _instance = saveGameData;
                }
                return _instance;
            }
        }
        public void OnDestroy()
        {
            _applicationIsQuitting = true;
        }

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM