文档:物品系统
whiteviera2025-10-01
物品系统的要求
- 能够从JSON导入静态物品数据(手动导入)
- 能够从静态物品数据生成包含【等级、稀有度】运行时数据的物品实例
- 能够统一注册和管理所有在世界中生成的物品实例(对象池?)
- 能够以物品容器组件的形式在世界中生成(如:内含多个物品实例的奖励箱,【内含一个枪械物品实例的、枪械形状的】物品容器,【内含一个物品实例、外观是默认物品容器形状的】掉落物品)
- 物品容器组件能够支持物品实例的存入(背包系统、储藏处)与取出(奖励箱)
物品静态数据(UItemStaticDataBase,继承自UPrimaryDataAsset)
- 物品ID(
FName) - 物品类别(
GameplayTag) - 物品信息
- 物品名称
FText - 物品描述
FText
- 物品名称
- 是否可在世界中放置?
- 是否可堆叠?
- 类别特定资源(对不同物品类型派生出不同的子类,存储在子类里)
- 缩略图
- 剪影图
- 模型
- 动画集
- 数值(float)
- ...
所有物品静态数据都以
FPrimaryAssetId("ItemStaticData", ItemID)的方式注册到AssetManager中。
物品运行时对象 (UItemObject,对不同类型的物品派生出不同的子类)
- 物品实例ID(FGuid)
- 物品静态数据
- 物品等级(
int32) - 物品稀有度(
EItemRarity) - 物品堆叠数量(
int32) - ...
物品交互接口(IItemInteractable)
- 提供物品“使用”的功能(如【消耗品-将效果应用于使用者】,【武器-将对应的武器装备于使用者的活跃武器栏位】,【】)
物品子系统(UGameInventorySubsystem)
- 管理所有的物品静态数据
- 提供物品静态数据的查找
- 提供物品运行时对象的创建和初始化
物品容器组件(UItemContainerComponent)
- 内容物(
TArray<UItem*>) - 加入 / 删除物品的接口
- 实现交互接口
物品容器Actor(AItemContainerActor)
- ???