/// <summary> /// 异步加载场景。 /// </summary> /// <param name="scenePath"></param> /// <param name="loadMode"></param> /// <returns></returns> public LoadSceneOperation loadSceneAsync(string scenePath, LoadSceneMode loadMode, Action callback = null) { //触发加载场景事件 foreach (LocalManager local in locals) { foreach (Manager manager in local.managers) { manager.onSceneLoad(scenePath); } } //加载场景 LoadSceneOperation operation = new LoadSceneOperation(scenePath, loadMode); operation.onSceneLoaded += Operation_onSceneLoaded; operation.onSceneLoaded += o => { callback?.Invoke(); }; return(operation); }
private void Operation_onSceneLoaded(LoadSceneOperation operation) { //按道理来讲场景里的东西应该都Awake过了,以防万一还是检查一下场景里的LocalManager吧。 Scene scene = SceneManager.GetSceneByPath(operation.scenePath); LocalManager currentLocal = scene.findInstance <LocalManager>(); if (currentLocal == null) { GameObject gameObject = new GameObject("LocalManager"); SceneManager.MoveGameObjectToScene(gameObject, scene); currentLocal = gameObject.AddComponent <LocalManager>(); } registerLocal(currentLocal); //触发场景加载完毕事件 foreach (LocalManager local in locals) { foreach (Manager manager in local.managers) { manager.onSceneLoaded(operation.scenePath); } } }