/// <summary> /// 如果有场景变换,采用异步等待方式还原数据 /// </summary> /// <param name="name"></param> /// <returns></returns> System.Collections.IEnumerator LoadScene(string name) { if (!UnityEngine.SceneManagement.SceneManager.GetActiveScene().name.Equals(name)) { AsyncOperation asyncOperation = UnityEngine.SceneManagement.SceneManager.LoadSceneAsync(name); asyncOperation.allowSceneActivation = false; while (asyncOperation.isDone) { yield return(null); } asyncOperation.allowSceneActivation = true; //等待1秒,初始化结束(场景物体) yield return(new WaitForSeconds(1)); } //将所有物体设置为激活状态,随后在还原 RestoreSystem.ClearDataModel(); var allDataModels = Resources.FindObjectsOfTypeAll <DataModelBehaviour>(); foreach (var item in allDataModels) { if (item.hideFlags != (HideFlags.NotEditable | HideFlags.HideInHierarchy)) { RestoreSystem.AddDataModel(item.GetComponent <UniqueID>().UniqueId, item); item.gameObject.SetActive(true); } } //等待1秒,初始化结束(DataModel脚本) yield return(new WaitForSeconds(1)); //执行数据写入,设置自身状态 _restoreSystem.LoadStorageData(); StartCoroutine(RestoreSceneCallBack()); }