private IEnumerator ChangeSceneInternal(int sceneCfgID, Action sceneLoadComplete = null) { GameEventManager.RaiseEvent(GameEventTypes.ExitScene); GameEventManager.EnableEventFiring = false; string assetName = ConfigManager.Get <SceneCfgLoader>().GetSceneAssetName(sceneCfgID); string sceneBundleName = string.Format("scenes/scene_{0}.bundle", assetName.ToLower()); m_operation = AssetBundleManager.LoadLevelAsync(sceneBundleName, assetName, false); m_progress = 0f; while (!m_operation.IsDone()) { m_progress = m_operation.Progress; yield return(null); } m_operation.UnloadAssetBundle(); AssetBundleManager.Clear(); GameEventManager.EnableEventFiring = true; AssetBundleManager.UnloadAssetBundle(string.Format("scenes/{0}.bundle", assetName)); var trunkMgrGo = GameObject.FindGameObjectWithTag("SceneTrunkMgr"); if (trunkMgrGo != null) { trunkMgr = trunkMgrGo.GetComponent <SceneTrunkMgr>(); } // 等待主角周围地块加载完毕 if (trunkMgr != null) { while (trunkMgr.HasLoadingTrunk()) { yield return(null); } } GameEventManager.RaiseEvent(GameEventTypes.EnterScene, sceneCfgID); if (sceneLoadComplete != null) { sceneLoadComplete(); } }
private static void SaveTrunksAsScenes(string sceneName, SceneTrunkMgr sceneTrunkMgr, List <TerrainTrunk> trunks) { string sceneSubDir = string.Format("Assets/Scenes/{0}_Trunks", sceneName); if (System.IO.Directory.Exists(sceneSubDir)) { System.IO.Directory.Delete(sceneSubDir, true); } System.IO.Directory.CreateDirectory(sceneSubDir); for (int i = 0; i < trunks.Count; i++) { var trunk = trunks[i]; string trunkSceneName = string.Format("{0}_{1}_{2}", sceneName, trunk.xIndex, trunk.zIndex); string trunkScenePath = string.Format("{0}/{1}.unity", sceneSubDir, trunkSceneName); var trunkScene = EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Additive); EditorSceneManager.SetActiveScene(trunkScene); trunk.terrian.transform.parent = null; EditorSceneManager.MoveGameObjectToScene(trunk.terrian.gameObject, trunkScene); EditorSceneManager.SaveScene(trunkScene, trunkScenePath); EditorSceneManager.CloseScene(trunkScene, true); var trunkAsset = AssetImporter.GetAtPath(trunkScenePath); var trunkName = string.Format("trunk_{0}_{1}.bundle", trunk.xIndex, trunk.zIndex); trunkAsset.assetBundleName = string.Format("scenes/{0}/{1}", sceneName, trunkName); sceneTrunkMgr.entries[i] = new SceneTrunkDataEntry() { x = trunk.xIndex, z = trunk.zIndex, trunkBundlePath = trunkAsset.assetBundleName, trunkName = trunkSceneName, }; } }
public void Setup(SceneTrunkMgr sceneTrunkmgr) { this.sceneTrunkMgr = sceneTrunkmgr; }