using Code.Scripts.HotUpdate.UI; using Cysharp.Threading.Tasks; using PhxhSDK.AOT; using PhxhSDK.AOT.SimpleLoader; using PhxhSDK.AOT.VersionUpdate; using UnityEngine; public class GameLauncher : MonoBehaviour { const string START_SCENE_NAME = "Assets/Scenes/StartScene.unity"; //最大能容忍的下载卡住时长,一旦超过则重新开始下载 // private const float DOWNLOAD_STUCK_TIME_MAX = 10; #if USE_HCLR private HybridCLRHelper _hybridCLRHelper; #endif private VersionUpdateHandle _versionUpdateHandle; private ISimpleLoader _simpleLoader; public bool enableHotUpdate = true; private void Start() { Launch(); } private async void Launch() { #if UNITY_EDITOR enableHotUpdate = false; #endif #if USE_YOO await YooAssetHelper.Init(); _simpleLoader = new SimpleLoader_YooAsset(); #else _simpleLoader = new SimpleLoader_Addressables(); #endif Debug.Log($"Launch Game! enableHotUpdate:{enableHotUpdate}"); _versionUpdateHandle = new VersionUpdateHandle(new TempUIHandle()); var result = await _versionUpdateHandle.CheckUpdate(); if (!result) { Debug.LogError("更新失败!,无法进入游戏"); return; } if (enableHotUpdate) { #if USE_HCLR Debug.Log("需要热更新,开始加载程序集"); _hybridCLRHelper = new HybridCLRHelper(); _hybridCLRHelper.SetDllList(AOTGenericReferences.PatchedAOTAssemblyList); _hybridCLRHelper.RegistLoader(_simpleLoader); await _hybridCLRHelper.LoadAssemblies(); Debug.Log("加载程序集结束!"); #endif } await EnterGame(); } private async UniTask EnterGame() { Debug.Log("开始加载游戏场景"); await _simpleLoader.LoadSceneAsync(START_SCENE_NAME); Debug.Log("加载游戏场景结束"); } }