33 lines
3.5 KiB
Markdown
33 lines
3.5 KiB
Markdown
# 最小登录第二轮:限定代码审查
|
||
|
||
2026-09-21,当前主会话自审,未开展新的独立agent复审。实施前裁决见《最小登录收尾-第二轮验收方案.md》《登录提前退出声音释放-修复方案与评审.md》。
|
||
|
||
## 本轮生产边界
|
||
|
||
| 文件 | 核对内容 |
|
||
|---|---|
|
||
| SoundService.cs | 只修改Release:未初始化的淡入淡出字典/订阅/池依赖可空,有效Addressables句柄才释放并清空。正常释放仍执行。 |
|
||
| FishingAct.cs | StartAsync捕获现有LoginLifetime,在奖励、FishingData初始化及地图等待后拒绝旧续体。LoadMapByCurID把加载结果先保存在局部变量,旧生命周期只释放该结果,不挂载旧地图;手部/鱼竿/弹窗await后再检查。 |
|
||
| FishingBehaviorB.cs | SetIKTarget允许鱼竿尚未创建。手部/鱼饵/鱼竿资源完成后,如果Unity对象已经销毁则释放本次迟到资源,避免写回已销毁对象。 |
|
||
| FishingStage.cs | 首登各await和进度回调检查原LoginLifetime/对象存活。仅在旧Stage已销毁或原会话取消时捕获base.StartAsync内部失败并记录Warning;存活且未取消的当前阶段失败仍抛出。迟到调试Console实例释放。 |
|
||
|
||
本轮不修改正式地址、身份映射、PlayFab存档比较规则、鱼概率/奖励、俱乐部/KV、SDK删除或ULoop工具包。与上一轮五处修复分别记录,没有整批回退其他改动。
|
||
|
||
## 已验证的代码边界
|
||
|
||
- SoundExitTests真实Release方法:未初始化、部分/完整初始化、取消及重复释放通过。
|
||
- MapExitTests真实LoadMapByCurID前半段:正常加载、等待中注销、等待中销毁;迟到资源只释放、不应用,通过。
|
||
- MapExitTests真实SetIKTarget:无鱼竿、无IK、正常设置通过。
|
||
- MapExitTests真实FishingStage try/catch片段:正常完成、取消后的旧失败停止、对象销毁但令牌尚未取消时停止、当前会话失败继续抛出,通过。框架IL证实旧场景卸载早于QuitAct注销,不能仅依赖取消令牌。
|
||
- 实际Unity编译最新0错误/271警告,acceptance-final-compile.json;四文件diff空白检查通过,SHA256为acceptance-round2-source-hashes.json。
|
||
- S4三项已取得真实Unity阶段入口证据:等待中退出、旧重试按钮、成功延迟中退出。后续新地图保护不改PF登录/SoundService已测逻辑;快速换号最终结果单列在第二轮验收报告,不在此预判。
|
||
|
||
## 风险及结论边界
|
||
|
||
1. 这是最小登录/首进场景/退出清理的限定补丁,不能宣称所有钓鱼玩法异步操作都已处理。
|
||
2. 对资源服务内部加载过程的所有并发组合、真实渠道SDK/真机、实际HTTP401/超时和断网自动重连,仍需对应环境验收。
|
||
3. 旧Stage销毁或取消后底层句柄错误按Warning留痕,是限定的旧阶段退出策略;不是通过无条件catch隐藏当前账号启动失败。最新成功运行未观察到此Warning,因此异常过滤分支的确定覆盖来自定向测试,不能称真实运行必定命中过该分支。
|
||
4. 测试宿主引擎/Addressables依赖为替身;完整Unity效果以实际运行记录为准。
|
||
|
||
21:40最终回归:快速101→102→101三轮错误0、最终实际Hub Test=OK;核心字段前后相同,完整存档隔离仍待验收。限定静态审查与定向测试未发现当前增量的新增确认阻塞项。最终运行验收结论由《最小登录收尾-第二轮验收结果.md》记录;旧R1独立审查不覆盖本轮四个文件。
|