# 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):** ```cpp // 添加 Tracer 属性 Instance->ItemData.AddProperty(UInternalItemProperty::ItemTracer(), EPropertyBagPropertyType::Object, UItemTracer::StaticClass()); // 设置 Tracer 值 Instance->ItemData.SetValueObject( UInternalItemProperty::ItemTracer(), NewTracer); ``` **在 InjectPayload 中使用(ItemContainer.cpp:49):** ```cpp 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 属性描述。