Init.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. using System.Threading;
  2. using UnityEngine;
  3. using UnityEngine.Events;
  4. namespace WS
  5. {
  6. ///<summary>启动器基类</summary>
  7. public abstract class Init : MonoBehaviour
  8. {
  9. private void Awake()
  10. {
  11. //网络消息回调主线程
  12. SynchronizationContext.SetSynchronizationContext(
  13. OneThreadSynchronizationContext.Instance
  14. );
  15. //限制帧数
  16. Application.targetFrameRate = 90;
  17. #if UNITY_EDITOR
  18. Log.IsEditor();
  19. #endif
  20. #if DEBUG_MODEL
  21. Log.IsDebug();
  22. GameObject.Instantiate(Resources.Load<GameObject>("Prefabs/Reporter/Reporter"));
  23. #endif
  24. #if DEBUG_LOG
  25. Log.IsWrite();
  26. #endif
  27. //设置为不销毁
  28. DontDestroyOnLoad(gameObject);
  29. //赋值Init物体
  30. Game.Init = this.transform;
  31. //初始化框架
  32. Game.EventSystem.LoadSystem(typeof(Init).Assembly);
  33. //计时/协程
  34. Game.Scene.AddComponent<TimerComponent>();
  35. //音效
  36. Game.Scene.AddComponent<VoiceManager>();
  37. //Game对象池
  38. Game.Scene.AddComponent<GamePoolManager>();
  39. //MVC代理
  40. Game.Scene.AddComponent<FacadeComponent>();
  41. //场景
  42. Game.Scene.AddComponent<SceneComponent>();
  43. //HTTP请求
  44. Game.Scene.AddComponent<RequestComponent>();
  45. //全局事件
  46. Game.Scene.AddComponent<EventComponent>();
  47. }
  48. private void Start()
  49. {
  50. //调用子类初始化
  51. Initialize();
  52. }
  53. ///<summary>初始化</summary>
  54. public abstract void Initialize();
  55. ///<summary>循环</summary>
  56. public virtual void OnUpdate() { }
  57. ///<summary>退出</summary>
  58. public void Quit(UnityAction OnCallback = null)
  59. {
  60. OnCallback?.Invoke();
  61. #if UNITY_EDITOR
  62. UnityEditor.EditorApplication.isPlaying = false;
  63. #else
  64. Application.Quit();
  65. #endif
  66. }
  67. private void Update()
  68. {
  69. OneThreadSynchronizationContext.Instance.Update();
  70. Game.EventSystem.Update();
  71. OnUpdate();
  72. }
  73. private void FixedUpdate()
  74. {
  75. Game.EventSystem.FixedUpdate();
  76. }
  77. private void LateUpdate()
  78. {
  79. Game.EventSystem.LateUpdate();
  80. }
  81. }
  82. }