Files
ft/CodexOutput/upserver/阶段4C2奖励面板点击穿透最小修复方案-待评审-2026-09-24.md

2.8 KiB
Raw Blame History

阶段4C2奖励面板点击穿透最小修复方案(待完整评审)

2026-09-24。依据:《阶段4C2第三次真实尝试与奖励确认记录-2026-09-24.md》及运行中实时探测实证。仅修复已实证UI缺陷;不改变奖励数据流、票据确认时序、Fault通道;未编码。

缺陷与证据

  • FishingRewardPanel.cs:166-168(组件初始化,KV模式):canvasGroup.alpha=0; canvasGroup.blocksRaycasts=false; canvasGroup.interactable=false——票据确认前面板不可见且不可点(设计要求"奖励Await前UI不可见")。
  • :31(ConfirmKVRewardAsync内展示回调):PresentReward(kvReward,()=>canvasGroup.alpha=1)——只恢复alpha。
  • 第三次真实运行(run 29520)实证:服务器侧奖励全链确认并展示(fishing-reward-confirmed→presented),但运行中探测 FishingRewardPanel alpha=1 blocksRaycasts=False interactable=False——面板可见而全部点击穿透,"收下"按钮(root_success/info/btn_play/btn_green→OnClickInHome)物理无法收到输入。0控制台错误(无异常,纯属性遗漏)。

拟改动1(生产,唯一行为变化)

FishingRewardPanel.cs:31 展示回调恢复全部三个交互属性:

PresentReward(kvReward,()=>{canvasGroup.alpha=1;canvasGroup.blocksRaycasts=true;canvasGroup.interactable=true;});

语义:票据确认前不可见不可点(:167初始化不变);确认展示时同时恢复可见与可交互。 不改:初始化、OnShow分段保存、ConfirmRewardAsync等待、kvPresentation(ApplySuccess)、OnDisable的Panel取消钩子(确认后仅置标志不Fault)、按钮回调本身。

拟改动2(既有提取测试维护)

  • PanelSlice.cs.txt:shim Canvas 补 blocksRaycasts/interactable 字段(默认false模拟:167初始化后状态);切片内展示回调同步为与生产相同的恢复语句。
  • PanelTests.cs.txt:现有断言保持;新增断言——pending期间 blocksRaycasts==false && interactable==false(钉住确认前不可点不变式);pending完成后 blocksRaycasts==true && interactable==true(红:现状切片只恢复alpha时失败)。

验收

  1. PanelTests红绿(修复前红、修复后绿);2. 固定验证45组171断言不回归;3. Editor/SERVICE_HOST双编译0错误;4. 静态diff:生产仅:31一行、切片/测试同步;其余受审文件字节不变(含controller-cancel修复后的FishingReward.cs/Validation hash)。真实"收下"点击闭环留待下一次用户授权运行。

请独立评审裁决

  1. 恢复三个属性是否完整(CanvasGroup还有interactableChildren等,本面板是否需要)?
  2. 展示回调在PresentReward内同步执行(fishing-reward-presented审计与属性恢复的先后/原子性)是否有风险?
  3. 红绿断言设计是否充分?
  4. 是否批准这两处限定修改?