Live 播放器:选择、两阶段加载与资源生命周期

Live 播放器:选择、两阶段加载与资源生命周期 由 Archify 生成的架构图。 本地资源与主数据 · UmaDatabaseController · 架构组件 本地资源与主数据 UmaDatabaseController 可选择的歌曲与角色目录 · UmaViewerMain.AbList / Lives · 架构组件 可选择的歌曲与角色目录 UmaViewerMain.AbList / Lives ① 选择歌曲、阵容与模式 · UmaViewerUI.PlayLive · 架构组件 · 默认 LiveMode = 1 ① 选择歌曲、阵容与模式 UmaViewerUI.PlayLive 默认 LiveMode = 1 自动补全失败:停止加载 · LiveAutoSelection.FillMissing · 架构组件 自动补全失败:停止加载 LiveAutoSelection.FillMissing ② 补齐空位并冻结选择 · LiveCharacterLoadData.CaptureAll · 架构组件 ② 补齐空位并冻结选择 LiveCharacterLoadData.CaptureAll ③ 注册第一批资源根 · LiveResourceRegister.RegisterDownload · 架构组件 ③ 注册第一批资源根 LiveResourceRegister.RegisterDownload ④ 依赖展开与分帧预载 · UmaAssetManager.PreLoadAndRun · 架构组件 · 每 4 个请求让出一帧 ④ 依赖展开与分帧预载 UmaAssetManager.PreLoadAndRun 每 4 个请求让出一帧 Standalone 缺失资源下载 · UmaViewerDownload.DownloadAssets · 架构组件 · Default 不做这一轮批量下载 Standalone 缺失资源下载 UmaViewerDownload.DownloadAssets Default 不做这一轮批量下载 复用句柄或打开资源文件 · AcquireOne / RefCount · 架构组件 · AB:LoadFromFile / LoadFromStream 复用句柄或打开资源文件 AcquireOne / RefCount AB:LoadFromFile / LoadFromStream 缺失、无效或异常:记录错误 · AcquireOne → false · 架构组件 · 不是事务式整体中止 缺失、无效或异常:记录错误 AcquireOne → false 不是事务式整体中止 ⑤ 加法加载 LiveScene · UmaSceneController.LoadLiveSceneAsync · 架构组件 ⑤ 加法加载 LiveScene UmaSceneController.LoadLiveSceneAsync ⑥ 建立控制器并转移对象 · LoadLive:OnSceneloaded · 架构组件 · ViewerMain / AudioManager 等转入 ⑥ 建立控制器并转移对象 LoadLive:OnSceneloaded ViewerMain / AudioManager 等转入 ⑦ 初始化时间轴、舞台与分谱 · Director.Initialize · 架构组件 · RequireStage 才实例化舞台 ⑦ 初始化时间轴、舞台与分谱 Director.Initialize RequireStage 才实例化舞台 ⑧ 建立阵容与歌词 · LoadLiveUma / LoadLiveLyrics · 架构组件 · 模型不播放普通 event idle ⑧ 建立阵容与歌词 LoadLiveUma / LoadLiveLyrics 模型不播放普通 event idle ⑨ 卸载旧场景后继续 · OnPrevSceneUnloaded · 架构组件 ⑨ 卸载旧场景后继续 OnPrevSceneUnloaded ⑩ 扫描时间轴的运行期依赖 · props / effect / 灯光纹理 · 架构组件 · variation == 0;舞台专用资源有门控 ⑩ 扫描时间轴的运行期依赖 props / effect / 灯光纹理 variation == 0;舞台专用资源有门控 ⑪ 第二轮预载与临时引用归还 · PreLoadAndRun(effectEntries) · 架构组件 · Director 已销毁则跳过初始化 ⑪ 第二轮预载与临时引用归还 PreLoadAndRun(effectEntries) Director 已销毁则跳过初始化 ⑫ 接通 UI 并初始化动作 · InitializeUI / InitializeTimeline · 架构组件 ⑫ 接通 UI 并初始化动作 InitializeUI / InitializeTimeline 全模式:逐通道动作序列 · LiveTimelineMotionSequence.Initialize · 架构组件 · 缺 clip 才加载 motionName / 2 / 3 全模式:逐通道动作序列 LiveTimelineMotionSequence.Initialize 缺 clip 才加载 motionName / 2 / 3 简单模式:基本动作集合 · InitCharaMotionSequence:mode == 0 · 架构组件 · 并非第一轮显式预载根 简单模式:基本动作集合 InitCharaMotionSequence:mode == 0 并非第一轮显式预载根 ⑬ 解码音轨并开始演出 · InitializeMusic → Director.Play · 架构组件 ⑬ 解码音轨并开始演出 InitializeMusic → Director.Play ⑭ Esc 或曲终返回 Version2 · Director.ExitLive · 架构组件 · 先销毁 LiveScene,再释放资源 ⑭ Esc 或曲终返回 Version2 Director.ExitLive 先销毁 LiveScene,再释放资源 ⑮ 释放非永久资源 · UnloadAllBundle(true) · 架构组件 · shader.a 与 livesettings 等保留 ⑮ 释放非永久资源 UnloadAllBundle(true) shader.a 与 livesettings 等保留 读 meta / master 填充列表 PlayLive 无法匹配服装 补全成功 注册根资源 仅 Standalone 逐请求 Acquire 失败返回 false 完成回调 加载完成 对象转移后 站位建成后 回调返回后 卸载完成 去重后的根 Director 仍存在 mode == 1 mode == 0 动作初始化后 动作初始化后 播放期间 旧场景卸载后 图例 前端 后端 数据库 云服务