using Axibug; using Axibug.Runtime; using System; using UnityEngine; using UnityEngine.Events; namespace Game { /// /// 游戏入口。 /// public partial class AppEntry : MonoBehaviour { public static BuiltinDataComponent BuiltinData { get; private set; } public static UpdateComponent HotUpdate { get; private set; } //public static UIMgr UI //{ // get; // private set; //} //public static Tips Tips //{ // get; // private set; //} public static LocalStorage LocalStorage { get; private set; } public static long Ticktime { get { return (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000; } } public static GameObject confirmUIGo = null; public static GameObject updateUIGo = null; //gc释放时间 long _GcTime; public long GCTime { get { return _GcTime; } set { _GcTime = value; } } //gc释放时间 long _idleTime; public long IdleTime { get { return _idleTime; } set { _idleTime = value; } } private static void InitCustomComponents() { BuiltinData = GameEntry.GetComponent(); HotUpdate = GameEntry.GetComponent(); //UI = GameEntry.GetComponent(); //Tips = GameEntry.GetComponent(); LocalStorage = LocalStorage.Instance; } public static void QuitGame() { #if UNITY_EDITOR UnityEditor.EditorApplication.isPlaying = false; #else Application.Quit(); #endif } //非随机调用策略 void CheckTickTime() { long tickTime = Ticktime - _GcTime; if (tickTime > 60000) { UnityEngine.Resources.UnloadUnusedAssets(); GC.Collect(); _GcTime = Ticktime; IdleTime = Ticktime; } } //待机状态策略 void CheckIdleTime() { //待机超过2分钟,调用gc if (Ticktime - IdleTime > 120000) { Log.Info("待机超过2分钟,手动调用GC"); IdleTime = Ticktime; GCTime = Ticktime; UnityEngine.Resources.UnloadUnusedAssets(); GC.Collect(); } } public static T OpenNativeUI(string name) where T : UnityEngine.Object { string path = $"Prefabs/{name}"; UnityEngine.Object obj = Resources.Load(path); GameObject go = Instantiate(obj) as GameObject; //如果是对话框,默认放在update框下面 if (name.Equals("NativeConfirmUI")) { confirmUIGo = go; go.transform.SetParent(updateUIGo.transform, false); } else if (name.Equals("NativeUpdateUI")) updateUIGo = go; return go.GetComponent(); } public static void CloseNativeUI(string name) { if (name.Equals("NativeConfirmUI")) { DestroyImmediate(confirmUIGo); confirmUIGo = null; } else if (name.Equals("NativeUpdateUI")) { DestroyImmediate(updateUIGo); updateUIGo = null; } } public static NativeConfirmUI ShowMessageBox(string title, string context, string confirmText, string cancelText, UnityAction confirmAction, UnityAction cancelAction) { NativeConfirmUI confirmUI = OpenNativeUI("NativeConfirmUI"); if (confirmUI == null) throw new GameException("原生对话框打开失败"); confirmUI.Show(title, context, confirmText, cancelText); confirmUI.AddOnclickListener(confirmAction, cancelAction); return confirmUI; } public void LateUpdate() { CheckIdleTime(); } } }