using System; using UnityEngine; namespace NBC { public class App : MonoBehaviour { public static App Inst { get; private set; } private static Scene _scene; public static Scene Main => _scene; private static event Action OnInitialized; public static event Action OnUpdate; public static event Action OnLateUpdate; public static event Action OnFixedUpdate; public static event Action OnApplicationQuitAction; public static event Action OnApplicationPauseAction; /// /// Scene下的事件系统组件 /// public static UIComponent UI { get; internal set; } public static void Init(Action callback = null) { if (Inst != null) return; new GameObject("App").AddComponent(); OnInitialized += callback; } private void Awake() { Inst = this; DontDestroyOnLoad(gameObject); } private void Start() { StartAsync().Coroutine(); } private void Update() { OnUpdate?.Invoke(); } private void LateUpdate() { OnLateUpdate?.Invoke(); } private void FixedUpdate() { OnFixedUpdate?.Invoke(); } private void OnApplicationQuit() { OnApplicationQuitAction?.Invoke(); } private void OnApplicationPause(bool pauseStatus) { OnApplicationPauseAction?.Invoke(); } private void OnDestroy() { _scene?.Dispose(); } private async FTask StartAsync() { // 初始化框架 await NBC.Platform.Unity.Entry.Initialize(GetType().Assembly); _scene = await Scene.Create(SceneRuntimeMode.MainThread); UI = _scene.AddComponent(); OnInitialized?.Invoke(); } } }