Files
AIGame/AIClient/Assets/AOT/Scripts/Boot/BootDriver.cs
T
udxandCursor 6550b8df4b Add AIServer, character art pipeline, and Art package boot integration.
Bring in MaleExplorer assets/shaders, model tooling and Hunyuan updates, plus boot/YooAsset Art package support.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 17:06:59 +08:00

77 lines
2.1 KiB
C#

using AOT.Boot;
using AOT.HotUpdate;
using AOT.Patch;
using AOT.UI;
using UnityEngine;
namespace AOT.Boot
{
/// <summary>
/// 壳层启动入口:版本检查 → 资源补丁 → HybridCLR/热更入口。
/// </summary>
public sealed class BootDriver : MonoBehaviour
{
[SerializeField] BootSettings settings = new BootSettings();
BootPatchView _view;
void Awake()
{
Application.targetFrameRate = 60;
Screen.sleepTimeout = SleepTimeout.NeverSleep;
DontDestroyOnLoad(gameObject);
if (Screen.orientation != ScreenOrientation.Portrait)
Screen.orientation = ScreenOrientation.Portrait;
}
void Start()
{
_view = BootPatchView.Create();
StartCoroutine(Bootstrap());
}
System.Collections.IEnumerator Bootstrap()
{
BootContext ctx = null;
string error = null;
var runner = new PatchRunner(this, settings, _view);
yield return runner.Run((c, e) =>
{
ctx = c;
error = e;
});
if (!string.IsNullOrEmpty(error) || ctx == null)
{
_view?.SetError(error ?? "启动失败");
Debug.LogError($"[Boot] {error}");
yield break;
}
_view?.SetStatus("加载热更代码…");
_view?.SetProgress(0.97f);
string loadError = null;
yield return HotUpdateLoader.LoadAndStart(ctx, settings, e => loadError = e);
if (!string.IsNullOrEmpty(loadError))
{
_view?.SetError(loadError);
Debug.LogError($"[Boot] {loadError}");
yield break;
}
_view?.SetProgress(1f);
_view?.SetStatus("热更已启动");
Debug.Log($"[Boot] OK app={ctx.AppVersion} res={ctx.ResVersion} cdn={ctx.CdnRoot}");
// 让热更侧完成首帧生成后再撤掉全屏启动遮罩
yield return null;
yield return null;
_view?.Hide();
}
}
}