using System.Threading; using UnityEngine; using YooAsset; namespace ET { // 1 mono模式 2 ILRuntime模式 3 mono热重载模式 public enum CodeMode { Mono = 1, ILRuntime = 2, Reload = 3, } public class Init: MonoBehaviour { public CodeMode CodeMode = CodeMode.Mono; public YooAssets.EPlayMode PlayMode = YooAssets.EPlayMode.EditorSimulateMode; private void Awake() { #if ENABLE_IL2CPP this.CodeMode = CodeMode.ILRuntime; #endif System.AppDomain.CurrentDomain.UnhandledException += (sender, e) => { Log.Error(e.ExceptionObject.ToString()); }; SynchronizationContext.SetSynchronizationContext(ThreadSynchronizationContext.Instance); DontDestroyOnLoad(gameObject); LitJson.UnityTypeBindings.Register(); ETTask.ExceptionHandler += Log.Error; Log.ILog = new UnityLogger(); Options.Instance = new Options(); CodeLoader.Instance.CodeMode = this.CodeMode; Options.Instance.Develop = 1; Options.Instance.LogLevel = 0; FUIEntry.Init(); this.CheckUpdate().Coroutine(); } // private void Start() // { // CodeLoader.Instance.Start(); // } private async ETTask CheckUpdate() { if (this.PlayMode == YooAssets.EPlayMode.HostPlayMode) { FUICheckUpdateComponent.Init(); } await YooAssetWrapper.InitializeAsync(this.PlayMode); int version = await YooAssetWrapper.UpdateStaticVersion(); Debug.Log(version); var result = await YooAssetWrapper.UpdateManifest(version); if (!result) { FUICheckUpdateComponent.SetMessage("Update Manifest Failed"); } YooAssetWrapper.GetDownloadSize(); result = await YooAssetWrapper.Download(); if (result) { if (this.PlayMode == YooAssets.EPlayMode.HostPlayMode) { FUICheckUpdateComponent.RemoveUI(); } CodeLoader.Instance.Start(); } else { FUICheckUpdateComponent.SetMessage("Download Resource Failed"); } } private void Update() { CodeLoader.Instance.Update?.Invoke(); } private void LateUpdate() { CodeLoader.Instance.LateUpdate?.Invoke(); } private void OnApplicationQuit() { CodeLoader.Instance.OnApplicationQuit(); CodeLoader.Instance.Dispose(); } } }