unity3d 大型项目 -- UFPS --- 背包系统(一)--- vp_Inventory 类实现的全面分析

vp_Inventory功能模块及实现方式

1.基本数据结构

(1) 基本组成单位

itemType代表一个物品类型,itemInstance代表它在背包中的一个物品实例

bankType代表一个能储存东西的物品类型(步枪,手枪,冲锋枪),bankInstance代表背包中的一把(步枪,手枪,冲锋枪)实例

vp_ItemType

                            1. Name:这种物体的名称

                            2. Description:这种物体的描述

                            3. Texture2D Icon:这种物体的图标

            4. Space:这种物体占用的空间

UnitBankType :ItemType

                            1. unit引用:表示这种银行存储的单位对象

                            2.Capacity:表示这种银行的容量限制(最多装多少库存)

                            3. Reloadable:这种银行是否允许重载(从背包中读取子弹)

                            4. RemoveWhenDepleted:这种银行的子弹一旦耗尽,立马将这个银行     

              的实例从我们背包中移除

vp_ItemInstance

                            1.itme引用(与asset文件连接的依据)

                            2. id

vp_UnitBankInstance :ItemInstance

          父类:

                      1.itme引用(指向bank对象)

                      2. id

          自身:

                      1.unit引用:表示这个银行的单位对象,从BankType读取

                      2.Count:这个银行当前的库存量(代表有多少个unit)

                      3. Capacity:这个银行的容量限制(最多装多少个unit)从BankType读取

                      4.方法:添加子弹,移除子弹等方法

背包模块:一切都建立在  itemType对象 的层次上

(2) 基本存储结构

List<vp_UnitBankInstance> m_UnitBankInstances

List<vp_ItemInstance> ItemInstances

 

2.顶层接口

在 OnEnable() 中向目标事件处理器注册的接口功能

         1."GetInventory"--GetInventory :获取背包

         2."TryGiveItem", TryGiveItem:尝试把一个Item对象加入到我们的库存中

         3."TryGiveItems", TryGiveItems:尝试添加多个item对象

         4."TryGiveUnitBank", TryGiveUnitBank:尝试添加bank对象

         5."TryGiveUnits", TryGiveUnits:尝试添加子弹

         6."TryDeduct", TryDeduct:尝试消耗子弹

         7."GetItemCount", GetItemCount:这个item对象在我们背包中的数量

3.各个功能模块

1.容量模块

1.数据结构:

(1) List<ItemCap> m_ItemCapInstances

(2) ItemCap:

       1.item引用:那种物品的容量

       2.Cap:容量

2.设置一个物品的容量

SetItemCap(vp_ItemType type, int cap, bool clamp = false)

       1.遍历物体容量集合,寻找m_ItemCapInstances[v].Type == type

       2.没有记录:m_ItemCapInstances.Add(new ItemCap(type, cap))

       3.如果是unit,设置这种子弹的内部银行的容量

       4.如果clamptrue:将超出容量的东西移除

                         1.子弹在内部银行的最大数量

                         2.itembank实例的数量

3.获取一个物品的容量

GetItemCap(vp_ItemType type)

           1.遍历m_ItemCapInstances,返回它的Cap的值

 

 

2.内部银行

1.数据结构:

(1) List<vp_UnitBankInstance> m_InternalUnitBanks

(2) 内部 bankInstance

       1.unit:指向内部银行保存的子弹类型对象

       2.item引用: 内部银行没有item引用

       3.Capacity:内部银行中最大子弹容量,从unit对象的itemCap中读取

       4.Count:当前内部银行的子弹库存量

对比外部bankInstance我们可以发现,内部bank的容量依赖于子弹的容量,外部

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值