网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月01日漏签0天
unity3d吧 关注:116,439贴子:560,893
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 13回复贴,共1页
<<返回unity3d吧
>0< 加载中...

背包物品怎样用字典实现数量增加,例如:我一开始捡了一个木头,

  • 只看楼主
  • 收藏

  • 回复
  • 月主戮
  • Prefab
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
背包物品怎样用字典实现数量增加,例如:我一开始捡了一个木头,字典加一,然后捡了石头,字典加一,但再一次捡石头时,字典也会加一,而不是石头数量加一,以后捡的东西总是与字典的第一个开始比较了。


  • 月主戮
  • Prefab
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
unity3d怎么实现背包不同物品数量的增加


2025-08-01 14:45:02
广告
不感兴趣
开通SVIP免广告
  • 加贺
  • Particle
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
分标签?(大概)


  • 游鱼向左_
  • Script
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
根据字典的key找到,value加一


  • 游戏好玩不
  • Physics
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
字典里存数组


  • FortuneQG
  • Particle
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
字典存物体 物体身上有ID对比id就可以了


  • 尚弦月
  • Script
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这其实是个基础背包设计的问题。
我这里举个对初学者最友好、最简单的例子,楼主可以参考一下
定义一个背包类inventory,它有2个方法:
【1】 物品变动的逻辑处理方法public void Change(int, int)。
因为我们要在外部调用,所以是public;
外部仅仅起到通知的作用(喂,这里有6块砖头,你要不要捡一下?),而完全不应该知道任何拾取过程——包括是否拾取成功,所以无返回值;
第一个参数int表示物品的代号,至于具体指代的是什么物品,这得看配置表(例如,001表示“砖头”╮(╯▽╰)╭);
第二个参数int表示将要变动的数量,例如6表示增加6块砖头,-6表示消耗/删除了6块砖头。
【2】物品变动的界面显示方法private void Show();
还是为了屏蔽外界的窥探——不允许外部知道本类内部的执行过程,标识为private;
这个Show方法其实是有一些参数的,不过这里我们就意思一下,具体实现我们不在这里讨论。
事实上,因为平台和开发引擎的不同,为了便于维护或者后期可能的跨平台,这种涉及到界面显示的方法一般都会写在一个专门的类里,在逻辑处理完毕后知会它一声:喂,我处理完了,赶快刷个新界面出来给用户大大们看!不过这里仅仅是个小例子,你懂就好╮(╯▽╰)╭
除了上面2个功能外,我们还需要存放背包内的物品信息,这里我用一个list集合来存放它们。
再给inventory定义一个list集合,取名叫bag,
至于这个bag到底有多大,还是应该看数据信息,例如玩家登陆后,服务器表示你的包只有8个格子,那么加载inventory时,bag就只能定义为8。
当然,如果我们设计了包裹扩容功能,那么还得对bag再稍微处理一个下,不过这里我们就不考虑那么多了。
bag里存的是我们自定义的物品类,例如我们把这个物品类叫做item,
这个item类里我们简单定义4个属性:
一个是int类型的物品代号;
另一个是int类型的物品位于背包的位置,例如1表示位于背包最左上角的那个格子里;
再一个是int类型的物品当前数量;
最后一个是int类型的物品可叠加上限。
事实上,这种涉及数据的功能我们一般会使用数据库,例如在移动端很常见的小型数据库SqlLit,因此实际上会有专门与数据库交互的功能。不过还是那句话:这只是个例子,你懂就好╮(╯▽╰)╭
好了,现在我们尝试拾取一个代号为001的物品(砖头?),它有6个,然后会发生什么呢?
1 背包满了,完全装不下,拾取失败
2 拾取一部分之后,背包满了,部分拾取失败
3 有同名装备且可堆叠,若堆叠到上限数量后仍然有空位存放,拾取成功
4 无同名装备且有空位,拾取成功
好的,现在我们的逻辑判断就很简单了:
遍历这个bag集合,瞅瞅有没有代号为001的物品,
若有则尝试堆叠,能完全堆下则拾取成功,调用下Show方法刷新界面;若仅堆叠一部分,则看看剩下的部分还有没有地方放,重复这个过程,直到全装下或再也装不下。全装下当然是拾取成功,但若是还剩一些没装下,那么就得费点力气处理了,例如给个背包已满的提示,再把要拾取的目标物品的数量变更下,或是直接把剩下的物品以邮件形式发给玩家,你懂得╮(╯▽╰)╭
若bag中没有这个物品,则瞅瞅bag现在还有没有空位置——比较下list当前容量与最大容量,
若有空位,则放进去,若能全放进去则拾取成功,若放到数量上限了还有剩,则看剩下的还有没有地方放,重复这个过程,直到全装下或再也装不下。
若没有空位,则拾取失败。
以上就是我要说的全部内容了,具体代码没写,毕竟相比敲代码,理清思路要费劲的多,相信楼主自己可以完成代码实现的。
最后祝楼主生活、学习顺利


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 13回复贴,共1页
<<返回unity3d吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示