protected override void OnEnter(ProcedureOwner procedureOwner) { base.OnEnter(procedureOwner); m_IsChangeSceneComplete = false; // 1 订阅事件 GameEntry.Event.Subscribe(LoadSceneSuccessEventArgs.EventId, OnLoadSceneSuccess); GameEntry.Event.Subscribe(LoadSceneFailureEventArgs.EventId, OnLoadSceneFailure); GameEntry.Event.Subscribe(LoadSceneUpdateEventArgs.EventId, OnLoadSceneUpdate); GameEntry.Event.Subscribe(LoadSceneDependencyAssetEventArgs.EventId, OnLoadSceneDependencyAsset); // 2 停止所有声音 GameEntry.Sound.StopAllLoadingSounds(); GameEntry.Sound.StopAllLoadedSounds(); // 3 隐藏所有实体 GameEntry.Entity.HideAllLoadingEntities(); GameEntry.Entity.HideAllLoadedEntities(); // 4 卸载所有场景 string[] loadedSceneAssetNames = GameEntry.Scene.GetLoadedSceneAssetNames(); for (int i = 0; i < loadedSceneAssetNames.Length; i++) { GameEntry.Scene.UnloadScene(loadedSceneAssetNames[i]); } // 5 还原游戏速度 GameEntry.Base.ResetNormalGameSpeed(); // 6 读取流程状态机中的数据 gotoSceneId = procedureOwner.GetData <VarInt>(Constant.ProcedureData.NextSceneId).Value; //1 获取要切换的场景id IDataTable <DRScene> dtScene = GameEntry.DataTable.GetDataTable <DRScene>(); //2 获取数据表中的所有行 DRScene drScene = dtScene.GetDataRow(gotoSceneId); //3 根据场景id筛选出目标行对应的场景 if (drScene == null) //如果选出的场景是空 退出函数 { Log.Warning("Can not load scene '{0}' from data table.", gotoSceneId.ToString()); return; } GameEntry.Scene.LoadScene(AssetUtility.GetSceneAsset(drScene.AssetName), this); //加载场景 m_BackgroundMusicId = drScene.BackgroundMusicId; //设置音乐id }
protected override void OnEnter(ProcedureOwner procedureOwner) { base.OnEnter(procedureOwner); m_IsChangeSceneComplete = false; GameEntry.Event.Subscribe(LoadSceneSuccessEventArgs.EventId, OnLoadSceneSuccess); GameEntry.Event.Subscribe(LoadSceneFailureEventArgs.EventId, OnLoadSceneFailure); GameEntry.Event.Subscribe(LoadSceneUpdateEventArgs.EventId, OnLoadSceneUpdate); GameEntry.Event.Subscribe(LoadSceneDependencyAssetEventArgs.EventId, OnLoadSceneDependencyAsset); // 停止所有声音 GameEntry.Sound.StopAllLoadingSounds(); GameEntry.Sound.StopAllLoadedSounds(); // 隐藏所有实体 GameEntry.Entity.HideAllLoadingEntities(); GameEntry.Entity.HideAllLoadedEntities(); // 卸载所有场景 string[] loadedSceneAssetNames = GameEntry.Scene.GetLoadedSceneAssetNames(); for (int i = 0; i < loadedSceneAssetNames.Length; i++) { GameEntry.Scene.UnloadScene(loadedSceneAssetNames[i]); } // 还原游戏速度 GameEntry.Base.ResetNormalGameSpeed(); int sceneId = procedureOwner.GetData <VarInt32>(Constant.ProcedureData.NextSceneId); m_GoToMenu = sceneId; IDataTable <DRScene> dtScene = GameEntry.DataTable.GetDataTable <DRScene>(); DRScene drScene = dtScene.GetDataRow(sceneId); if (drScene == null) { Log.Warning("Can not load scene '{0}' from data table.", sceneId.ToString()); return; } GameEntry.Scene.LoadScene(AssetUtility.GetSceneAsset(drScene.AssetName), Constant.AssetPriority.SceneAsset, this); m_BackgroundMusicId = drScene.BackgroundMusicId; }