using System; using UnityEngine; namespace XGame.Framework { /// /// 入口 /// internal static class Entrance { /// /// 程序入口 /// [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)] internal static void Access() { Profiler.BeginSample(typeof(Entrance), "Log.Initialize"); Log.Initialize(); Profiler.EndSample(); #if UNITY_EDITOR Profiler.BeginSample(typeof(Entrance), "IsInvalid"); var errorCode = IsInvalid(); if (errorCode != 0) { return; } Profiler.EndSample(); #endif Profiler.BeginSample(typeof(Entrance), "AppManager.Initialize"); AppManager.Initialize(); Profiler.EndSample(); } #if UNITY_EDITOR private static int IsInvalid() { var config = XGameConfig.Load(); if (config == null) { Log.Error($"Entrance error: 找不到 XGameConfig.asset."); return -1; } var launchSceneName = config.launchSceneName; var gameLogicTypeName = config.gameLogicTypeName; XGameConfig.Unload(config); if (string.IsNullOrEmpty(launchSceneName)) { Log.Error($"Entrance error: XGameConfig.asset 没有设置启动场景."); return -2; } if (!UnityEngine.SceneManagement.SceneManager.GetActiveScene().name.Equals(launchSceneName)) { Log.Error($"Entrance error: XGameConfig.asset 启动场景没有激活."); return -3; } if (string.IsNullOrEmpty(gameLogicTypeName)) { Log.Error($"Entrance error: XGameConfig.asset 没有设置启动脚本."); return -4; } if (Type.GetType(gameLogicTypeName) == null) { Log.Error($"Entrance error: XGameConfig.asset 找不到启动脚本. Type:{gameLogicTypeName}"); return -5; } //var assembly = System.Reflection.Assembly.Load(config.launchAssemblyName); //assembly.GetType(gameLogicTypeName); return 0; } #endif } }