Files
PHY/PHY_ItemSystem_Attributes.md
2026-03-05 14:44:34 +08:00

3.5 KiB
Raw Permalink Blame History

PHY Item Attribute System (GIS)

本次新增

  • Source/PHYInventory/Private/GameplayTags/PHYInventoryItemTags.h
  • Source/PHYInventory/Private/GameplayTags/PHYInventoryItemTags.cpp
  • Source/PHYInventory/Private/Items/PHYItemFragment_PropertySet.h
  • Source/PHYInventory/Private/Items/PHYItemFragment_PropertySet.cpp
  • Source/PHYInventory/Private/Items/PHYItemBlueprintLibrary.h
  • Source/PHYInventory/Private/Items/PHYItemBlueprintLibrary.cpp
  • Source/PHY/Private/Character/PHYCharacter.h
  • Source/PHY/Private/Character/PHYCharacter.cpp
  • Source/PHY/Private/Character/PHYPlayerCharacter.h
  • Source/PHY/Private/Character/PHYPlayerCharacter.cpp
  • Source/PHY/Private/Gameplay/Player/PHYPlayerState.h
  • Source/PHY/Private/Gameplay/Player/PHYPlayerState.cpp

新增联动能力12

1) 装备属性自动生效/回滚(服务器权威)

  • 在基础角色上新增 UGIS_EquipmentSystemComponent
  • 服务器 BeginPlay 时:先初始化 InventorySystem,再初始化 EquipmentSystem
  • APHYPlayerCharacter 监听 OnEquipmentStateChangedEvent
  • 事件触发后通过 APHYPlayerState::HandleItemEquippedState 应用或回滚属性。
  • 使用 AppliedEquipmentItems 防止同一个 ItemId 重复叠加。

2) 药品 Server RPC 使用链路

  • APHYPlayerCharacter 新增:
    • UFUNCTION(Server, Reliable) ServerUseConsumableByItemId(FGuid ItemId, int32 Count=1)
  • 服务端流程:
    • ItemId 在库存中查找道具
    • 扣减库存数量(RemoveItem
    • 调用 APHYPlayerState::ApplyConsumableFromItem 应用恢复
  • 当前默认读取道具动态属性标签:
    • GIS.Attribute.Item.Consumable.RestoreHealth
    • GIS.Attribute.Item.Consumable.RestoreInnerPower

设计

  • 基于 GIS 的 UGIS_ItemDefinition + Fragment。
  • 新增 UPHYItemFragment_PropertySet 作为统一“武器/装备/药品”属性片段。
  • 道具实例创建时会把 BaseFloatModifiers / BaseIntegerModifiers 写入 UGIS_ItemInstance 动态属性。

主要能力

  • 统一道具大类:EPHYItemArchetype
    • Weapon
    • Equipment
    • Consumable
    • Material
    • Quest
  • 统一装备槽:EPHYEquipSlotType
  • 药品效果载荷:FPHYConsumablePayload
    • RestoreHealth
    • RestoreInnerPower
    • DurationSeconds

GameplayTags 管理

标签已集中在 Source/PHYInventory/Private/GameplayTags/PHYInventoryItemTags.*,避免代码中散落字符串:

  • GIS.Item.Type.Weapon
  • GIS.Item.Type.Equipment
  • GIS.Item.Type.Consumable
  • GIS.Item.EquipSlot.MainHand
  • GIS.Attribute.Item.AttackGIS.Attribute.Item.CritRate

如何创建三类物品

  1. 在编辑器创建 UGIS_ItemDefinition 资产。
  2. 给该资产添加 FragmentPHY Item Property Settings
  3. 按类型配置:
    • 武器:ItemArchetype=WeaponEquipSlot=MainHand/OffHand,填写攻击/暴击等属性。
    • 装备:ItemArchetype=Equipment,设置对应 EquipSlot,填写防御/免伤/韧性等属性。
    • 药品:ItemArchetype=Consumable,填写 ConsumablePayload(回血/回内力)。
  4. 把物品加入你的掉落表/默认背包配置。

蓝图辅助

UPHYItemBlueprintLibrary 提供:

  • GetItemArchetype
  • GetEquipSlotType
  • IsWeaponItem
  • IsEquipmentItem
  • IsConsumableItem
  • GetConsumablePayload

用于 UI 显示和使用逻辑分流。

备注

  • 当前为 MVP先打通类型与属性承载。
  • 下一步可扩展随机词条Roll、品质颜色、套装、与 GAS GameplayEffect 自动联动。