4.3 KiB
4.3 KiB
PHY 编辑器打通清单(装备/药品/通知)
目标:打通你当前 C++ 已实现的链路:
- 装备穿脱 -> 属性生效/回滚
- 药品使用(Server RPC)-> 扣除库存 -> 恢复属性
- 通知飘字(Info/Reward/Warning)
0. 代码前提(已实现)
APHYCharacter已挂载:InventorySystem+EquipmentSystem。- 服务器
BeginPlay会初始化库存与装备系统。 APHYPlayerCharacter::ServerUseConsumableByItemId已有严格校验:- 必须是
GIS.Item.Type.Consumable - 找不到道具/扣除失败会发 Warning 通知
- 必须是
APHYPlayerState已接入 owner 通知分发(支持 DS/Listen/Standalone)。
1. GameplayTags(必须先做)
请在 Project Settings -> Gameplay Tags 或 Config/DefaultGameplayTags.ini 中确认存在:
1.1 类型标签(必须)
GIS.Item.Type.WeaponGIS.Item.Type.EquipmentGIS.Item.Type.ConsumableGIS.Item.Type.Material
1.2 药品效果标签(必须)
GIS.Attribute.Item.Consumable.RestoreHealthGIS.Attribute.Item.Consumable.RestoreInnerPower
1.3 装备属性标签(建议)
GIS.Attribute.Item.AttackGIS.Attribute.Item.DefenseGIS.Attribute.Item.CritRateGIS.Attribute.Item.CritDamageGIS.Attribute.Item.HitGIS.Attribute.Item.DodgeGIS.Attribute.Item.ParryGIS.Attribute.Item.CounterChanceGIS.Attribute.Item.ArmorPenetrationGIS.Attribute.Item.DamageReductionGIS.Attribute.Item.LifeStealGIS.Attribute.Item.ResilienceGIS.Attribute.Item.MoveSpeedGIS.Attribute.Item.HealthRegenRateGIS.Attribute.Item.InnerPowerRegenRateGIS.Attribute.Item.MaxHealthGIS.Attribute.Item.MaxInnerPower
2. 角色蓝图组件配置
打开你的玩家角色蓝图(继承 APHYPlayerCharacter):
- 选中
InventorySystem组件:- 确认存在普通背包集合(如
GIS.Collection.Inventory) - 确认存在装备槽集合(如
GIS.Collection.Equipped,SlotCollection)
- 确认存在普通背包集合(如
- 选中
EquipmentSystem组件:TargetCollectionTag设为装备槽集合标签(如GIS.Collection.Equipped)
若
TargetCollectionTag不匹配,装备状态事件不会触发,属性不会生效。
3. 创建三类物品(UGIS_ItemDefinition)
3.1 药品示例:ID_Cons_HealthSmall
DisplayName: 小还丹ItemTags: 添加GIS.Item.Type.Consumable- 图标:设置
Icon - 动态或静态属性至少配置其一:
GIS.Attribute.Item.Consumable.RestoreHealth = 120GIS.Attribute.Item.Consumable.RestoreInnerPower = 0
3.2 武器示例:ID_Wpn_BronzeSword
DisplayName: 青铜剑ItemTags: 添加GIS.Item.Type.Weapon- 属性:
GIS.Attribute.Item.Attack = 35GIS.Attribute.Item.CritRate = 0.03
3.3 装备示例:ID_Equip_ClothArmor
DisplayName: 布甲ItemTags: 添加GIS.Item.Type.Equipment- 属性:
GIS.Attribute.Item.Defense = 20GIS.Attribute.Item.DamageReduction = 0.02
4. 物品“使用”按钮绑定(UI)
在你的物品操作逻辑中(右键菜单/快捷键):
- 从
UItemData取ItemInfo.Item Item->GetItemId()拿到FGuidGetOwningPlayerPawn-> CastAPHYPlayerCharacter- 调用:
ServerUseConsumableByItemId(ItemId, 1)
5. 通知验证点
你当前 UI 会接 OnGameplayNotifyDelegate,预期:
- 使用药品成功:
Reward(例如:使用 小还丹 x1) - 使用非药品:
Warning - 数量不足/扣除失败:
Warning - 装备成功:
Info(装备 xxx) - 卸下成功:
Info(卸下 xxx)
6. 联机验收顺序(建议)
- Standalone
- Listen Server + 1 Client
- Dedicated Server + 1 Client
每轮都检查:
- 药品是否扣库存
- 生命/内力是否恢复
- 装备/卸下是否改变属性
- 通知是否只在拥有者客户端显示
7. 常见问题
- 现象:药品点了无反应
- 常见原因:缺少
GIS.Item.Type.Consumable
- 常见原因:缺少
- 现象:装备后属性不变
- 常见原因:
EquipmentSystem.TargetCollectionTag不匹配装备集合
- 常见原因:
- 现象:Dedicated Server 下无提示
- 先确认 HUD/UI 绑定是否在客户端建立;
PlayerState已支持 owner 通知分发
- 先确认 HUD/UI 绑定是否在客户端建立;
如果你需要,我可以继续生成第二份文档:
PHY_Item_Asset_Convention.md(命名规范 + 品质色 + 图标规范 + 掉落表字段模板)