背包系统设计

8 篇文章 0 订阅
4 篇文章 0 订阅

配置

ItemIdMainTypeSubTypeMaxStackableCount
唯一Id大类小类最大堆叠数

MainType:

主要的分类方式,不建议写入数据库

SubType:

MainType下面的分类方式,不建议写入数据库

MaxStackableCount:

为0时表示该Item不可堆叠;可用于处理各种Item的存储,当然有些时候,需要一种添加Item后不可改变数量的情况,具体可以根据业务设计

设计 

存储
UIdItemIdCount
拥有数量

基本的存储如上,但是这里有些问题需要考虑。如果Count为0,是否需要加载到内存?是否可以重用Count为0 的数据?建议不要重用Count为0的数据,就我遇到的情况,前期我们重用数据,但是后面发现一些生成的DbId, 被其它的系统依赖,当重用这些DbId, 就会出现添加的数据不是新数据,而有些业务又只处理新数据,在这里就出现了,对于某些业务新数据是有意义的,而有的却没有。当然如果不用背包做一些奇怪的系统以来,我觉得重用是完全没问题的,但是谁也保证不了

获取

一般来说玩家可以通过 MainType 和 itemId 获取相关的Item,数据量大的情况,建议细分查考下面链接

背包系统设计-获取数据量大问题-CSDN博客 

增减问题

如果存在好几个 未到 堆叠数数据,发生数量变化时怎样处理?应该加到谁身上?减到谁身上?

理论上,我们希望,减数据的时候先减 同itemId中 数量最小的;

                                加数据的时候先加 同itemId中 数量最多的;

这样可以保证尽量少的数据在内存中

bool TryRemoveItemCount(uint itemId, uint count)
{
    // 先检查是否足够

    // 获取这个类型的物品list, 按照数量递增排序

    int removeCount = remove;
    while(removeCount > 0)
    {
        // 移除物品直到 removeCount 为0   
    }

    // 更新数据,推送等
}

void AddItemCount(uint itemId, uint count)
{
    // 获取这个类型的物品list, 按照数量递减排序

    int addCount = remove;
    while(addCount > 0)
    {
        // 添加物品直到 addCount 为0   
    }

    // 更新数据,推送等
}
 关联系统

这个系统算是所有系统的基础系统,不管是奖励的发放、还是其它业务,都是通过背包来工作的,但是不建议所有系统跟背包进行强关联,否则系统后期会很难维护,就像我们前期为了省事,考虑可能出现的各种交易,将所有的系统DbId跟背包关联,导致后期背包中存在很多无用的数据,而且一个数据存储在两个地方,本身就是违背设计的,但是由于各种原因,我们还是做了,希望大家做的时候想清楚,当然如果遇到一个喜欢应付的合作对象,你会发现,不管你怎样说他总有理由 ^ ^

奖励可以参考下面的链接

奖励Reward系统设计-CSDN博客  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity背包系统是一个游戏中常用的组件,用于管理玩家在游戏中所获得的道具。一个完整的背包系统通常由数据、逻辑和UI三部分组成。在设计过程中,我们首先进行UI设计,包括背包的标题、关闭键和背包内的格子容器。 背包系统的数据部分主要负责管理物品的信息,例如物品的名称、图片、数量等。逻辑部分负责实现将物品放置进背包、对背包内物品进行管理以及使用背包内物品等功能。实际上,当我们获取或移动物品时,我们会直接修改背包数据库中的物品信息。修改完成后,我们通过背包中的UI元素来获取背包数据库中相应索引的物品信息,并将物品栏中的UI信息更新为数据库中对应序号的物品的图片和数量。 通过将背包系统分解为数据、逻辑和UI三部分,我们可以有效地管理背包系统的复杂逻辑关系,并使代码更加清晰和易于维护。这种设计模式有助于提高游戏开发的效率和代码质量。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Unity游戏开发:背包系统的实现](https://blog.csdn.net/float_freedom/article/details/126243888)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Unity3D RPG实现 2 —— 背包系统](https://blog.csdn.net/weixin_43757333/article/details/123187025)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值