67 lines
2.1 KiB
C++
67 lines
2.1 KiB
C++
// ChildHood Project - 文本底框 UI 基类
|
||
// 对应技术方案: docs/technical/交互系统-技术方案.md 第6节(通用文本显示UI)
|
||
// 职责:半透明底框 + 一句话叙事/对话文本,带淡入淡出
|
||
|
||
#pragma once
|
||
|
||
#include "CoreMinimal.h"
|
||
#include "Blueprint/UserWidget.h"
|
||
#include "NarrativeTextWidget.generated.h"
|
||
|
||
class UTextBlock;
|
||
|
||
/**
|
||
* UNarrativeTextWidget
|
||
*
|
||
* 文本底框 UI 的 C++ 基类。蓝图子类(WBP_NarrativeText)继承此类,
|
||
* 在 UMG 编辑器中布局可视组件,并确保组件名与 BindWidget 匹配。
|
||
*
|
||
* 绑定要求:
|
||
* - TextBlock 名为 "NarrativeTextBlock" — 显示叙事/对话文字
|
||
* - WidgetAnimation 名为 "FadeInAnim" — 淡入动画(0.2s)
|
||
* - WidgetAnimation 名为 "FadeOutAnim" — 淡出动画(0.2s)
|
||
*
|
||
* 布局要求:
|
||
* - Anchors: Horizontal Center, Vertical ~0.6(屏幕中心偏下)
|
||
* - Border: 半透明黑色背景(~60%),圆角,SizeToContent
|
||
* - TextBlock: 白色文字,居中,自动换行
|
||
*/
|
||
UCLASS(Abstract, Blueprintable)
|
||
class UNarrativeTextWidget : public UUserWidget
|
||
{
|
||
GENERATED_BODY()
|
||
|
||
public:
|
||
|
||
/** 设置叙事文本内容 */
|
||
UFUNCTION(BlueprintCallable, Category = "Interaction|Narrative")
|
||
void SetNarrativeText(const FString& Text);
|
||
|
||
/** 显示文本(播放淡入动画) */
|
||
UFUNCTION(BlueprintCallable, Category = "Interaction|Narrative")
|
||
void Show();
|
||
|
||
/** 隐藏文本(播放淡出动画) */
|
||
UFUNCTION(BlueprintCallable, Category = "Interaction|Narrative")
|
||
void Hide();
|
||
|
||
protected:
|
||
|
||
/** 叙事文字 TextBlock,蓝图子类必须有一个同名 TextBlock */
|
||
UPROPERTY(meta = (BindWidget))
|
||
UTextBlock* NarrativeTextBlock;
|
||
|
||
/** 淡入动画(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;
|
||
};
|