64 lines
3.1 KiB
Markdown
64 lines
3.1 KiB
Markdown
# 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 属性描述。
|