vault backup: 2023-11-22 13:16:57
This commit is contained in:
parent
befb15f93c
commit
2cd21e7b77
50
05-SDHGame/Inventory & Synthesis文档.md
Normal file
50
05-SDHGame/Inventory & Synthesis文档.md
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
---
|
||||||
|
title: Inventory & Synthesis文档
|
||||||
|
date: 2022-08-12 14:18:31
|
||||||
|
excerpt:
|
||||||
|
tags:
|
||||||
|
- SDHGame
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
# 目录
|
||||||
|
- [[#Inventory]]
|
||||||
|
- [[#数据结构]]
|
||||||
|
- [[#物品类型]]
|
||||||
|
- [[#如何添加一个物品]
|
||||||
|
- [[#Synthesis]]
|
||||||
|
|
||||||
|
# Inventory
|
||||||
|
使用Lyra的 **Entry - Instance - Definition - Fragment**结构以及FFastArraySerializer/FFastArraySerializerItem网络同步结构。并针对一些设计做出改动。可以参考:https://zhuanlan.zhihu.com/p/552480961
|
||||||
|
|
||||||
|
## 数据结构
|
||||||
|
- URPGInventoryComponent
|
||||||
|
- FRPGItemList & FRPGItemEntry:解决网络同步问题用结构。其中`FRPGItemEntry存储StackNum(堆叠数量)信息`。
|
||||||
|
- URPGItemInstance:物品实例以及存储动态数据。
|
||||||
|
- URPGItemDefinition:物品定义以及存储静态数据。
|
||||||
|
- `TObjectPtr<URPGItemTypeFragment>`:类型Fragment
|
||||||
|
- `TArray<TObjectPtr<URPGItemFragment>>`:物品其他信息Fragment
|
||||||
|
|
||||||
|
主要的物品操作逻辑位于URPGInventoryComponent。
|
||||||
|
## 物品类型
|
||||||
|
记录物品类型以及类型对应的行为 & 动作。存储于`URPGItemDefinition`中的`TObjectPtr<URPGItemTypeFragment> ItemTypeFragments`,可在构建URPGItemDefinition资产时挂载对应的URPGItemTypeFragment。Fragment逻辑位于Inventory/Item/RPGItemTypeFragment.h & cpp中。
|
||||||
|
- CanBeUse:消耗品或者可以被使用的物品。
|
||||||
|
- Weapon:武器。可以附带词条以及镶嵌物。
|
||||||
|
- Equip:装备。可以附带词条以及镶嵌物。
|
||||||
|
- Material:材料。用于合成各种东西的材料;或者为卖钱道具。
|
||||||
|
- Token:凭证。钥匙、信物;各种钱。
|
||||||
|
- Attachable:镶嵌物。宝石、附魔之类东西。
|
||||||
|
- Formulas:已经学会的配方。
|
||||||
|
|
||||||
|
## 如何添加一个物品
|
||||||
|
相关物品定义位于Items目录下。
|
||||||
|
1. 新建一个父类为RPGItemDefinition的蓝图类。前缀为ID_XXXX。
|
||||||
|
2. 按照物品类型选择ItemTypeFragments,并且填入相关信息即可。
|
||||||
|
|
||||||
|
PS. Formulas类除了定义物品信息之外还需要定义父类为RPGSynthesisDefinition的配方类,明明方式为ID_XXXX_SD。
|
||||||
|
# Synthesis
|
||||||
|
合成逻辑也位于URPGInventoryComponent,主要函数为:
|
||||||
|
- SynthesisItem():合成物品。
|
||||||
|
- SynthesisItems():合成N个物品。
|
||||||
|
- ConsumeItemsByDefinition():消耗物品。
|
||||||
|
- GetSynthesisNums():计算可以可成的物品数量。
|
||||||
|
- GetSynthesisNumsByDefinition():计算可以可成的物品数量。
|
@ -1,29 +0,0 @@
|
|||||||
---
|
|
||||||
title: Inventory设计
|
|
||||||
date: 2022-08-12 14:18:31
|
|
||||||
excerpt:
|
|
||||||
tags: SDHGame
|
|
||||||
rating: ⭐
|
|
||||||
---
|
|
||||||
|
|
||||||
## 设计方案
|
|
||||||
直接使用Lyra的 **Entry - Instance - Definition - Fragment**结构以及FFastArraySerializer/FFastArraySerializerItem网络同步结构。并针对一些设计做出改动。
|
|
||||||
|
|
||||||
### 宝石/词条
|
|
||||||
- 宝石的基类现在统一改名成Attachment;词条命名为Word。
|
|
||||||
- 两者数据存储在ItemInstance中。实现专门的Fragment用来设置ItemInstance的里存储数据。
|
|
||||||
|
|
||||||
### 可使用物品
|
|
||||||
考虑到需要便捷的自定义Use()逻辑,思路有二(目前倾向于第二个):
|
|
||||||
1. ~~在ItemDefinition里编写对应的几个BlueprintNativeEvent(),并根据需要进行Overrider。之后ItemInstance的对应接口函数调用ItemDefinition中的函数即可实现。~~
|
|
||||||
2. 在ItemInstance里放置几个行为的Delegate。创建几个对应行为的Fragment,在创建时将内部的函数函数绑到Delegate上。
|
|
||||||
|
|
||||||
## 物品列表
|
|
||||||
- CanBeUse
|
|
||||||
- Weapon
|
|
||||||
- Equip
|
|
||||||
- Material
|
|
||||||
- Token
|
|
||||||
- 灵石
|
|
||||||
- Attachable
|
|
||||||
- 生命宝石
|
|
Loading…
x
Reference in New Issue
Block a user