feat: isolate lobby during minigames
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
31afce6882
commit
6a5e534d00
@@ -614,7 +614,23 @@ Core 不引用 UnityEngine,不访问 UI,不访问 socket,不读写 Unity
|
||||
4. 本地 smoke 进入小游戏。
|
||||
5. 验证异常路径:CDN 缺文件、版本不存在、资源缺失、服务端断开、重复退出。
|
||||
|
||||
## 12. 异常处理与兜底
|
||||
## 12. 大厅与小游戏阶段隔离
|
||||
|
||||
进入小游戏后,大厅必须暂停并隐藏,直到小游戏退出后再恢复。大厅与小游戏是互斥阶段,不允许大厅 UI、输入、场景单位渲染与小游戏同时处于可操作状态。
|
||||
|
||||
隔离由 `MiniGameStageIsolation` 负责,调用方在进入小游戏前调用 `SuspendLobbyForMiniGame()`,在 `MiniGameHost.OnGameExited` 中调用 `ResumeLobbyAfterMiniGame()`。`MiniGameHost` 只负责小游戏生命周期,不直接依赖大厅对象。
|
||||
|
||||
隔离范围包括:
|
||||
|
||||
- 大厅操作 UI 根节点:隐藏并在恢复时还原原始 active 状态。
|
||||
- 大厅场景/单位/特效根节点:隐藏并停止渲染。
|
||||
- 大厅输入脚本:禁用,避免小游戏期间响应大厅点击、摇杆或快捷键。
|
||||
- 大厅 Tick/表现脚本:禁用,避免后台继续驱动大厅单位。
|
||||
- 需要保持 active 的 CanvasGroup:关闭交互和射线阻挡。
|
||||
|
||||
进入失败也必须恢复大厅。下载失败、校验失败、DLL 加载失败或热更客户端 `OnEnter` 抛异常时,`MiniGameHost` 会触发 `OnGameExited`,调用方应统一在该回调中恢复大厅。
|
||||
|
||||
## 13. 异常处理与兜底
|
||||
|
||||
| 场景 | 处理策略 |
|
||||
|---|---|
|
||||
@@ -631,7 +647,7 @@ Core 不引用 UnityEngine,不访问 UI,不访问 socket,不读写 Unity
|
||||
| 结算 Prefab 缺失或结构不符 | 宿主回退代码构建简易结算窗。 |
|
||||
| 玩家重复退出/重复结算 | 宿主通过 `_running`、`_waitingForResultConfirm` 防重入。 |
|
||||
|
||||
## 13. 开发红线
|
||||
## 14. 开发红线
|
||||
|
||||
1. 小游戏专属逻辑必须使用 C#,不要新增 Lua 小游戏逻辑。
|
||||
2. 新资源加载必须异步,不要使用同步 `XResLoader.LoadRes` / `LoadResAB`。
|
||||
@@ -644,7 +660,7 @@ Core 不引用 UnityEngine,不访问 UI,不访问 socket,不读写 Unity
|
||||
9. 发布旧版本时不要只覆盖部分平台,除非明确确认平台与服务端兼容。
|
||||
10. 签名、MD5、框架版本校验失败时不要降级加载旧包。
|
||||
|
||||
## 14. 验收清单
|
||||
## 15. 验收清单
|
||||
|
||||
新增小游戏合入前至少验证:
|
||||
|
||||
@@ -662,7 +678,7 @@ Core 不引用 UnityEngine,不访问 UI,不访问 socket,不读写 Unity
|
||||
- 客户端能显示结算并退出回大厅。
|
||||
- CDN 缺文件、入口类型错误、资源缺失等异常不会卡死。
|
||||
|
||||
## 15. 建议开发拆分
|
||||
## 16. 建议开发拆分
|
||||
|
||||
第一阶段:最小闭环
|
||||
|
||||
|
||||
Reference in New Issue
Block a user