using System.Collections; using Cysharp.Threading.Tasks; using GameBase; using TEngine; public partial class GameApp:Singleton { /// /// 热更域App主入口。 /// /// public static void Entrance(object[] objects) { Log.Warning("======= 看到此条日志代表你成功运行了热更新代码 ======="); Log.Warning("======= Entrance GameApp ======="); Instance.Init(); Instance.Start(); Utility.Unity.AddUpdateListener(Instance.Update); Utility.Unity.AddFixedUpdateListener(Instance.FixedUpdate); Utility.Unity.AddLateUpdateListener(Instance.LateUpdate); Utility.Unity.AddDestroyListener(Instance.OnDestroy); Utility.Unity.AddOnDrawGizmosListener(Instance.OnDrawGizmos); Utility.Unity.AddOnApplicationPauseListener(Instance.OnApplicationPause); Instance.StartGameLogic(); } /// /// 开始游戏业务层逻辑。 /// 显示UI、加载场景等。 /// private void StartGameLogic() { StartBattleRoom().Forget(); } private async UniTaskVoid StartBattleRoom() { await GameModule.Resource.LoadSceneAsync("scene_battle").ToUniTask(Utility.Unity.Behaviour); await BattleSystem.Instance.LoadRoom().ToUniTask(Utility.Unity.Behaviour); } /// /// 关闭游戏。 /// /// 关闭游戏框架类型。 public static void Shutdown(ShutdownType shutdownType) { if (shutdownType == ShutdownType.None) { return; } if (shutdownType == ShutdownType.Restart) { Utility.Unity.RemoveUpdateListener(Instance.Update); Utility.Unity.RemoveFixedUpdateListener(Instance.FixedUpdate); Utility.Unity.RemoveLateUpdateListener(Instance.LateUpdate); Utility.Unity.RemoveDestroyListener(Instance.OnDestroy); Utility.Unity.RemoveOnDrawGizmosListener(Instance.OnDrawGizmos); Utility.Unity.RemoveOnApplicationPauseListener(Instance.OnApplicationPause); return; } if (shutdownType == ShutdownType.Quit) { UnityEngine.Application.Quit(); #if UNITY_EDITOR UnityEditor.EditorApplication.isPlaying = false; #endif } } private void Start() { GameTime.StartFrame(); var listLogic = _listLogicMgr; var logicCnt = listLogic.Count; for (int i = 0; i < logicCnt; i++) { var logic = listLogic[i]; logic.OnStart(); } } private void Update() { GameTime.StartFrame(); TProfiler.BeginFirstSample("Update"); var listLogic = _listLogicMgr; var logicCnt = listLogic.Count; for (int i = 0; i < logicCnt; i++) { var logic = listLogic[i]; TProfiler.BeginSample(logic.GetType().FullName); logic.OnUpdate(); TProfiler.EndSample(); } TProfiler.EndFirstSample(); } private void FixedUpdate() { GameTime.StartFrame(); TProfiler.BeginFirstSample("FixedUpdate"); var listLogic = _listLogicMgr; var logicCnt = listLogic.Count; for (int i = 0; i < logicCnt; i++) { var logic = listLogic[i]; TProfiler.BeginSample(logic.GetType().FullName); logic.OnFixedUpdate(); TProfiler.EndSample(); } TProfiler.EndFirstSample(); } private void LateUpdate() { GameTime.StartFrame(); TProfiler.BeginFirstSample("LateUpdate"); var listLogic = _listLogicMgr; var logicCnt = listLogic.Count; for (int i = 0; i < logicCnt; i++) { var logic = listLogic[i]; TProfiler.BeginSample(logic.GetType().FullName); logic.OnLateUpdate(); TProfiler.EndSample(); } TProfiler.EndFirstSample(); } private void OnDestroy() { GameTime.StartFrame(); var listLogic = _listLogicMgr; var logicCnt = listLogic.Count; for (int i = 0; i < logicCnt; i++) { var logic = listLogic[i]; logic.OnDestroy(); } } private void OnDrawGizmos() { #if UNITY_EDITOR GameTime.StartFrame(); var listLogic = _listLogicMgr; var logicCnt = listLogic.Count; for (int i = 0; i < logicCnt; i++) { var logic = listLogic[i]; logic.OnDrawGizmos(); } #endif } private void OnApplicationPause(bool isPause) { var listLogic = _listLogicMgr; var logicCnt = listLogic.Count; for (int i = 0; i < logicCnt; i++) { var logic = listLogic[i]; logic.OnApplicationPause(isPause); } } }