Files
loneseDocument/Plugins/Item/UInternalItemProperty.md
meishibiezb 29a3f77908 init
2026-06-04 21:44:13 +08:00

3.1 KiB
Raw Blame History

UInternalItemProperty

基本信息

  • 类型: UCLASS (BlueprintFunctionLibrary)
  • 父类: UBlueprintFunctionLibrary
  • 源文件: Plugins/Item/Source/Item/Public/ItemFactory.h
  • 模块: Item

功能概述

静态函数库提供单一常量FName "Internal_ItemTracer"。用作属性包中UItemTracer对象的键。同时在C++和Blueprint中可用。

设计用意

集中的键注册表模式。防止硬编码字符串在代码库中出现漂移。被ItemFactory::CreateItemInstance和IItemContainer::InjectPayload引用。

职责范围

提供物品Tracer的标准属性包键。单一职责 - 名称常量。

项目内依赖

(无项目内依赖)

对外接口

UInternalItemProperty 是 BlueprintFunctionLibrary对外仅提供一个静态方法

  • ItemTracer() (BlueprintPure, Category = "Constants|Names") → FName: 返回常量 FName("Internal_ItemTracer")。这是物品属性包中 UItemTracer 对象的键名。

此方法在 Blueprint 和 C++ 中均可调用。其设计目的是集中管理内部键名,避免字符串散落在代码各处。

调用方视角: 调用方通常不需要直接使用此类。它被 ItemFactory 和 IItemContainer::InjectPayload 内部使用:

  • 创建时ItemFactory::CreateItemInstance 使用此键向 ItemData 添加 UItemTracer 属性ItemFactory.cpp:19,21
  • 注入时IItemContainer::InjectPayload 使用此键查找 Tracer 并更新其位置ItemContainer.cpp:49

使用方法

UInternalItemProperty 是一个集中管理的键名注册表。调用方通常在需要访问物品属性包中的 Tracer 时使用。

在 C++ 中使用ItemFactory.cpp:19,21

// 添加 Tracer 属性
Instance->ItemData.AddProperty(UInternalItemProperty::ItemTracer(),
    EPropertyBagPropertyType::Object, UItemTracer::StaticClass());
// 设置 Tracer 值
Instance->ItemData.SetValueObject(
    UInternalItemProperty::ItemTracer(), NewTracer);

在 InjectPayload 中使用ItemContainer.cpp:49

const FName PropName = UInternalItemProperty::ItemTracer();
if (const FPropertyBagPropertyDesc* Desc =
    Payload->ItemData.FindPropertyDescByName(PropName))
{
    // ... 获取 Tracer 并更新位置
}

在 Blueprint 中使用: 作为 BlueprintFunctionLibrary 的 BlueprintPure 函数,在 Blueprint 中可以直接调用 ItemTracer() 节点获取 FName 常量,用于从物品的属性包中查找 Tracer 对象。

用例

  • Plugins/Item/Source/Item/Public/ItemFactory.h:13-24 -- UInternalItemProperty 类定义ItemTracer() 返回 static const FName("Internal_ItemTracer")。
  • Plugins/Item/Source/Item/Private/ItemFactory.cpp:19 -- CreateItemInstance 调用 UInternalItemProperty::ItemTracer() 作为键名向属性包添加 Object 类型属性。
  • Plugins/Item/Source/Item/Private/ItemFactory.cpp:21 -- CreateItemInstance 调用 UInternalItemProperty::ItemTracer() 作为键名向属性包设置 Tracer 对象值。
  • Plugins/Item/Source/Item/Private/ItemContainer.cpp:49 -- InjectPayload NVI 调用 UInternalItemProperty::ItemTracer() 作为键名从属性包查找 Tracer 属性描述。