重做物品拾取系统方法(附实验用项目)
先来看看效果吧
然后是项目
时间过的飞快,距离开始用星火编辑器制作游戏到现在转眼已过去一年时间,我也由一个代码小白变成了现在重做物品系统只需要几个小时即可完成的入门者(其实用了两个下午,不过真正去写的时间也就几个小时)
这期间收获颇丰,虽然游戏还没制作出来,不过也快了,因为初次制作游戏构筑的世界稍微大了一点点……在这里我再次强烈推荐大家学习使用星火编辑器,即使你不打算做游戏,也可以从中学到很多和编程有关的知识,从而培养出严谨的逻辑思维能力
下边进入正题
什么情况下需要我们去重做物品拾取系统?
其实官方目前的物品拾取系统已经很完善,可以满足大多数游戏需求,不过当我们有更多个性化需求时,比如需求“谁打到的物品只能谁来拾取”,那么用官方目前的物品拾取系统无法满足需求(或者说无法轻易满足需求,可能存在方法实现,但我没找到),这时候我们就可以自己重做一个物品拾取系统来满足需求
是不是感觉很新奇?官方物品拾取系统还可以重做吗?
当然可以,而且不仅物品拾取系统,官方目前的大多数系统如果不能满足我们的需求,都可以通过重做来解决问题!
目前为止我已经重做了物品信息展示系统、商店系统、对话系统以及现在的物品拾取系统,大家也可以去多多尝试噢
重做物品拾取系统的具体思路
在这里我要先鸣谢一个人,就是R神(不知道谁是R神的到官方群里问下就知道了),因为刚开始我以为这东西是用某个预制事件触发的,后来R神告诉我只用简单的周期性检索周围物品即可(这是官方物品拾取系统的触发方式),这让我少走了很多弯路
有了这个情报就会简单不少,我们可以通过被动技能启用周期性效果或者给玩家主控添加一个buff来周期性检索周围物品两个办法实现,这里我选择了用被动技能来做
先用被动技能每0.3秒检索一次玩家主控300码范围内所有物品在地上时的单位,获取由这些单位组成的单位组,然后将单位组通过触发编辑器中的函数转换为物品数组,再将物品数组传递给客户端用来显示,每次显示时先清空之前的显示控件,然后创建新的显示控件,当玩家点击控件拾取物品时再把控件对应的物品传递回服务端,服务端进行验证后执行拾取操作
在这样一个大思路的前提下,我们还可以向客户端多传递一个物品归属数组参数来实现“谁打到的物品只能谁来捡”的功能
其实单单根据思路把功能做出来还是远远不够的,后来我又通过一些方法优化了部分过程,比如在向客户端传递参数前先对比下现在的参数和上次的参数是否相同,如果相同就不用传递了,这样就避免了部分重复操作,再比如通过一个数值变量来判断玩家主控周围近期是否存在物品,如果周围一直没有物品,就不用发送自定义事件到客户端让客户端关闭物品拾取ui了,现在总体还算平滑,不过可能还是存在一些隐藏的问题没有被我发现,大家以后在实践中遇到时再去解决吧
下边为具体实现方法,因为图片比较多,这里会另外单独开贴存放图片
附录1、视频中主控头上的血量为什么显示是浮点数?因为这个新项目本来是前几天我用来复现老项目中遇到的两个bug而开的,其中一个bug就是用血条编辑器做的血条,当绑定单位生命属性时,会显示为浮点数,这个bug是因为设置了单位的生命恢复属性引起的,已经向官方反馈,官方也表示很快(大概下个版本)会修复这个bug,如果大家不想看到浮点数,只用在打开项目后把主控的生命恢复属性删除(隐藏/设置为0)即可
附录2、这个项目复现的第二个bug是在用自定义背包时,当单位第一个背包取消勾选可拾取,即使第二个背包没有取消勾选可拾取,物品在(用官方自带的拾取系统)拾取时不会进入第二个背包,而是提示已超过此类物品限制(意思是背包放不下该物品了),条件为物品是自己后添加的物品分类(这个项目中的装备分类),这就是为什么视频中上边有六个物品格子(用自定义背包做的)的原因,是用来复现第二个bug的,也是我为什么重做物品拾取系统的一个原因,因为重做后物品的拾取不再通过官方拾取系统的判定,而是通过我们自己的判定来决定这个物品是否可以被拾取进背包(通俗来说就是以前官方说了算,现在我们自己说了算),对了,这个bug也已经反馈给官方,相信很快也会修复
附录3、虽然重做物品拾取系统后很多方面都会变的更自由,但是相应的需要处理的事情也会变多,因为这时候在数据编辑器中设置的背包准入验证器什么的都没用了(官方已经管不到了),这些东西都需要我们自己来处理,所以,如果你还是一名新人,那么最好不要去重做物品拾取系统,因为可能你重做了物品拾取系统,还要去重做物品信息展示系统来无缝衔接,比如视频中那件品质2衣服,在用官方背包物品信息面板的丢弃按钮丢弃后,所有玩家都可以拾取,此时如果你还想让这件物品有30秒保护期,就只能通过重做物品信息面板然后自己去处理物品在丢弃时的代码(准确来说是玩家在客户端点击你自己做的物品信息面板丢弃按钮时发送自定义事件到服务端,服务端接收这个自定义事件后写的代码),总的来说,有得必有失,虽然重做物品拾取系统提升了自由度,但对大家的基础能力也是一种考验,建议在至少达到入门级(这里指对星火编辑器使用的熟练度)后再来重做,那样漏洞会更少
暂时就这些吧,顺便在这里提前祝大家新年快乐