Files
ChildHood/Source/ChildHood/Interaction/PickupNotificationWidget.h
T
starmen1265 1e5f40e633 feat(interaction): 接通叙事/拾取通知Widget表现层
P-016: 将EffectManager的ShowNarrative/HideNarrative/ShowPickupNotification
从日志占位改为真实CreateWidget+AddToViewport+淡入淡出生命周期。

- 新增UPickupNotificationWidget C++基类(对称NarrativeTextWidget)
- EffectManager新增SetWidgetClasses注入接口与Widget弱引用缓存
- PerformCleanup补齐Narrative/Pickup Widget兜底淡出移除
- ASystemDriver新增两个TSubclassOf配置点,BeginPlay注入给EffectManager
- Widget Class未注入时回退日志占位,保证Effect流程不卡

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 23:30:50 +08:00

70 lines
2.4 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// ChildHood Project - 拾取通知 UI 基类
// 对应技术方案: docs/technical/交互系统-技术方案.md 第7节(WBP_PickupNotification)
// 职责:拾取/获得物品时的通知弹窗("找到了 XXX"),带淡入淡出
// 注意:执行案 §跨系统交互规定拾取通知归物品系统控制,本基类为交互系统 ShowPickupNotification
// Action 提供表现能力,v0.1 暂由 EffectManager 日志占位或本 Widget 简化显示,物品系统
// 接通后(P-013 后续)再正式启用。
#pragma once
#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "PickupNotificationWidget.generated.h"
class UTextBlock;
/**
* UPickupNotificationWidget
*
* 拾取通知 UI 的 C++ 基类。蓝图子类(WBP_PickupNotification)继承此类,
* 在 UMG 编辑器中布局可视组件,并确保组件名与 BindWidget 匹配。
*
* 绑定要求:
* - TextBlock 名为 "PickupTextBlock" — 显示拾取通知文字(如 "找到了 旧橡皮!")
* - WidgetAnimation 名为 "FadeInAnim" — 淡入动画(0.2s)
* - WidgetAnimation 名为 "FadeOutAnim" — 淡出动画(0.2s)
*
* 布局要求:
* - Anchors: 右下角或屏幕中下,与 NarrativeText 错位
* - Border: 半透明背景,圆角
* - TextBlock: 白色文字,居中
*/
UCLASS(Abstract, Blueprintable)
class UPickupNotificationWidget : public UUserWidget
{
GENERATED_BODY()
public:
/** 设置通知文本内容 */
UFUNCTION(BlueprintCallable, Category = "Interaction|Pickup")
void SetPickupText(const FString& Text);
/** 显示通知(播放淡入动画) */
UFUNCTION(BlueprintCallable, Category = "Interaction|Pickup")
void Show();
/** 隐藏通知(播放淡出动画) */
UFUNCTION(BlueprintCallable, Category = "Interaction|Pickup")
void Hide();
protected:
/** 通知文字 TextBlock,蓝图子类必须有一个同名 TextBlock */
UPROPERTY(meta = (BindWidget))
UTextBlock* PickupTextBlock;
/** 淡入动画(0.2s),蓝图子类必须有同名 WidgetAnimation */
UPROPERTY(meta = (BindWidgetAnim), Transient)
UWidgetAnimation* FadeInAnim;
/** 淡出动画(0.2s),蓝图子类必须有同名 WidgetAnimation */
UPROPERTY(meta = (BindWidgetAnim), Transient)
UWidgetAnimation* FadeOutAnim;
/** 是否正在显示中 */
bool bIsVisible = false;
virtual void NativeOnInitialized() override;
};