Compare commits

...

2 Commits

5 changed files with 43 additions and 3 deletions
@@ -11,6 +11,19 @@ void UCollectionCompleteWidget::NativeOnInitialized()
Super::NativeOnInitialized();
}
void UCollectionCompleteWidget::NativeDestruct()
{
// 清理计时器:StayTimer/FadeOutTimer 的 lambda 捕获裸 this,Widget 销毁后 fire 会野指针
// (与 CollectionHUDComponent::EndPlay 同类卫生写法,防关卡切换/退 PIE 时的悬挂 timer)
if (UWorld* World = GetWorld())
{
World->GetTimerManager().ClearTimer(StayTimerHandle);
World->GetTimerManager().ClearTimer(FadeOutTimerHandle);
}
Super::NativeDestruct();
}
void UCollectionCompleteWidget::ShowComplete(const FString& Text, float DisplayDuration, float InFadeOutDuration)
{
CachedFadeOutDuration = InFadeOutDuration;
@@ -59,6 +59,9 @@ protected:
virtual void NativeOnInitialized() override;
/** Widget 销毁时清理计时器:lambda 捕获裸 this,销毁后 fire 会野指针 */
virtual void NativeDestruct() override;
private:
/** 停留结束 → 播放淡出动画 */
@@ -11,6 +11,19 @@ void UCollectionNotifWidget::NativeOnInitialized()
Super::NativeOnInitialized();
}
void UCollectionNotifWidget::NativeDestruct()
{
// 清理计时器:StayTimer/FadeOutTimer 的 lambda 捕获裸 this,Widget 销毁后 fire 会野指针
// (与 CollectionHUDComponent::EndPlay 同类卫生写法,防关卡切换/退 PIE 时的悬挂 timer)
if (UWorld* World = GetWorld())
{
World->GetTimerManager().ClearTimer(StayTimerHandle);
World->GetTimerManager().ClearTimer(FadeOutTimerHandle);
}
Super::NativeDestruct();
}
void UCollectionNotifWidget::InitializeNotif(const FString& Text, FLinearColor TextColor,
float InFadeInDuration, float InStayDuration, float InFadeOutDuration)
{
@@ -65,6 +65,9 @@ protected:
virtual void NativeOnInitialized() override;
/** Widget 销毁时清理计时器:lambda 捕获裸 this,销毁后 fire 会野指针 */
virtual void NativeDestruct() override;
private:
/** 停留结束 → 播放淡出动画 */
+11 -3
View File
@@ -86,6 +86,14 @@
- **偏差原因**: 与用户对齐的交付边界——C++ 基类属 P-013(程序),WBP 蓝图创建属 P-016(Widget 表现层接通,用户已决定新开任务)。无 WBP 时 C++ 判空跳过 UI 创建,收集逻辑仍正常运行
- **建议处理**: 已产出创建指南 `docs/technical/笔记/P-013-收集系统Widget蓝图创建指南.md`;WBP 创建纳入 P-016 执行
### 偏差 6:§14g 集成测试(完整拾取流程 PIE 端到端验证)未执行 — 推迟至 P-017 完成后
- **对应执行案条目**: 技术方案 §14g「集成测试(与交互系统联调)·验证方式:完整拾取流程验证」
- **偏差等级**: 中等(范围项推迟,非实现缺陷)
- **原方案**: 技术方案 §14g 要求完成端到端集成测试——在 PIE 中走通"拾取交互物 → AddToBackpack 回调 → 收集系统记账 → 通知/进度/完成 UI"全链路
- **实际实现**: §14g 的代码前置(§14c 回调连线)与测试载体(`BP_Pickup.uasset`,commit 9742774)已就位;但**端到端 PIE 验证未执行**,全仓库无测试记录
- **偏差原因**: §14g 端到端验证依赖 P-016 的 3 个 WBP 蓝图资产(偏差5)+ P-017 的拾取物配置(Category/ItemId/Effect.Actions=AddToBackpack)。二者均未开始:无 WBP 时 C++ 判空跳过 UI、无拾取配置则链路无法触发,PIE 无法走通。属任务编排的前后依赖,非实现遗漏
- **建议处理**: §14g 端到端验证作为 **follow-up**,在 P-017(交互物放置 + 拾取配置)完成后补做。本任务 P-013 收尾范围限定为【代码层 + §14c 回调连线 + 三层架构】,经分阶段审查通过后解除 blocked;§14g 验证结果回填本报告或新开小任务追踪
---
## 三、审查修复(非偏差,对抗性审查后的质量提升)
@@ -100,6 +108,6 @@
## 四、总结
- **行为规则覆盖**:执行案全部规则已实现,无重大行为偏差
- **实现偏差**:5 项,全部轻微(4 项为技术方案层面的实现决策/命名/时序优化,1 项为交付边界划分)
- **建议**:偏差 1/2/3 在下次技术方案文档同步时更新;偏差 5 纳入 P-016 执行;偏差 4 保留
- **遗留**:3 个 WBP 蓝图 + 拾取物交互物配置(Category/ItemId/Effect)属 P-016 范围
- **实现偏差**:6 项(5 轻微 + 1 中等):偏差 1/2/3/4 为技术方案层面的实现决策/命名/时序优化,偏差 5 为交付边界划分(WBP 蓝图归 P-016),偏差 6 为范围项推迟(§14g 集成验证依赖 P-016/P-017)
- **建议**:偏差 1/2/3 在下次技术方案文档同步时更新;偏差 5 纳入 P-016 执行;偏差 4 保留;偏差 6 作为 P-017 完成后的 follow-up
- **遗留**:3 个 WBP 蓝图(属 P-016)+ 拾取物配置(属 P-017)+ §14g 端到端 PIE 集成验证(属 P-017 完成后的 follow-up)