库存系统

库存系统概述
一个库存组件通过一个或者多个道具集合来组织和管理道具实例。而一个Actor一般拥有一个库存组件。
一个库存组件可以包含多个道具集合,每个集合可以包含多个道具栈。不同的道具栈可以在同一库存下的不同集合之间交换信息,也可以和其他库存中的集合交换信息(如从商店库存购买一个道具到玩家的库存)
一个道具集合中的每一个元素就是一个道具栈,而道具栈只是简单的结构体用于存放对应的道具实例,及其数量,以及所属集合中的位置。
库存组件
游戏中常见的通过商店系统买道具、从地上拾取道具、或者杀死一个敌人获取了遗物,这些游戏机制本质上可以理解为两个不同库存组件之间的道具数据进行交换。
游戏中常见的、玩家背包整理、装备武器等、行为其本质上只是一个库存组件中、不同集合之间的道具数据交互、排序。
道具集合
在库存组件的默认值上,你需要定义道具集合。
作为一个设计师,首先你需要想清楚你的游戏中,需要哪些道具集合作为游戏中道具的容器。
GIS提供三种类型的集合,每一种集合,组织和管理道具的方式略有不同。
集合类型 | 描述 |
ItemCollection | 包含一个道具堆栈列表,每一个道具堆栈包含对道具实例的引用、道具的数量等信息。你可以存储任意数量的道具到这个集合里。 |
MultiStackItemCollection | 与ItemCollection不同的是,它允许一个可堆叠道具、被分散到多个堆栈中,如果你的游戏有格子拆分、合并等,建议用这一种集合。 |
SlotItemCollection | 这种集合适用于“装备”集合,每一个道具堆栈和一个“道具槽”一一对应,这种集合的尺寸由槽集合定义。 |
道具集合是道具的分组,库存系统用道具集合去管理道具。道具信息(ItemInfo)存储在其中,道具信息(ItemInfo)是一个具有道具和数量的结构体。默认情况下,唯一道具的数量恒为1,普通道具的数量始终≥1。
可以在编辑器中指定集合允许装备的道具标记过滤, 详看道具限制(ItemRestrictions)文档。 如果计划使用多个项目集合,使用Tag来区分项目集合以避免混淆。目前GIS中存在的Collection有:
集合设计案例
- Item.Collection.Main: 默认主集合
- Item.Collection.Equip.Armor: 护甲集合
- Item.Collection.Equip.Weapon: 武器集合
- Item.Collection.Hidden: 隐藏集合
添加和删除项目时,建议使用 GIS_ItemInfo 结构体。项目信息不仅有道具数量,而且还具有完整道具的引用。在创建道具之前可以指定道具的所属者。
获取道具信息
道具集合中的每一个元素就是一个道具栈,而道具栈只是简单的结构体用于存放对应的道具实例,及其数量,以及所属集合中的位置。