using System.Threading; using UnityEngine; using UnityEngine.Events; namespace WS { ///启动器基类 public abstract class Init : MonoBehaviour { private void Awake() { //网络消息回调主线程 SynchronizationContext.SetSynchronizationContext( OneThreadSynchronizationContext.Instance ); //限制帧数 Application.targetFrameRate = 90; #if UNITY_EDITOR Log.IsEditor(); #endif #if DEBUG_MODEL Log.IsDebug(); GameObject.Instantiate(Resources.Load("Prefabs/Reporter/Reporter")); #endif #if DEBUG_LOG Log.IsWrite(); #endif //设置为不销毁 DontDestroyOnLoad(gameObject); //赋值Init物体 Game.Init = this.transform; //初始化框架 Game.EventSystem.LoadSystem(typeof(Init).Assembly); //计时/协程 Game.Scene.AddComponent(); //音效 Game.Scene.AddComponent(); //Game对象池 Game.Scene.AddComponent(); //MVC代理 Game.Scene.AddComponent(); //场景 Game.Scene.AddComponent(); //HTTP请求 Game.Scene.AddComponent(); //全局事件 Game.Scene.AddComponent(); } private void Start() { //调用子类初始化 Initialize(); } ///初始化 public abstract void Initialize(); ///循环 public virtual void OnUpdate() { } ///退出 public void Quit(UnityAction OnCallback = null) { OnCallback?.Invoke(); #if UNITY_EDITOR UnityEditor.EditorApplication.isPlaying = false; #else Application.Quit(); #endif } private void Update() { OneThreadSynchronizationContext.Instance.Update(); Game.EventSystem.Update(); OnUpdate(); } private void FixedUpdate() { Game.EventSystem.FixedUpdate(); } private void LateUpdate() { Game.EventSystem.LateUpdate(); } } }