using Cysharp.Threading.Tasks; using UnityEngine; namespace ZC { public class ZCGame { private GameObject _self; private Transform _objectPool; private bool isDisposed; private bool isPause; private float gameTime; public static ZCGame _zcGame; private ObjectManager _objectManager; private UIManager _uiManager; private ProcedureManager _procedureManager; public static GameObject Self => _zcGame._self; public static Transform ObjectPool => _zcGame._objectPool; public static float GameTime => _zcGame.gameTime; public static IObjectManager ObjectManager => _zcGame._objectManager; public static IUIManager UIManager => _zcGame._uiManager; public static IProcedureManager ProcedureManager => _zcGame._procedureManager; public ZCGame(GameObject self) { _zcGame = this; this._self = self; this._objectPool = self.transform.Find("ObjectPool"); this.isDisposed = false; this.isPause = false; AssemblyManager.Initialize(); this.UpdateGame().Forget(); } async UniTask UpdateGame() { this.Init(); while (!this.isDisposed) { await UniTask.Yield(); if (!Application.isPlaying) // 关闭应用的时候自动调用 { this.isDisposed = true; this.Dispose(); break; } if (this.isPause) continue; this.gameTime += Time.fixedTime; this.Update(this.gameTime); this.LateUpdate(this.gameTime); } } public void Pause() { this.isPause = true; } public void Resume() { this.isPause = false; } void Init() { this._objectManager = new ObjectManager(); this._objectManager.OnInit(); this._uiManager = new UIManager(); this._procedureManager = new ProcedureManager(); this._objectManager.Add(this._uiManager); this._objectManager.Add(this._procedureManager); this._procedureManager.ChangeProcedure(ProcedureType.LoadingGameSceneProcedure); } void Update(float time) { this._objectManager.OnUpdate(time); } void LateUpdate(float time) { } void Dispose() { this._objectManager.OnDispose(); Debug.Log("关闭应用了"); } } }