这是一个制作机器人AI必不可少的系统。
本帖已不再更新,详情请移步基础AI脚本查看。
大家好,这里给大家分享一下我花费数日终于搞定的用于机器人AI辨别和获取距离最近的存活玩家的功能。一切奥妙尽在HUD中。
思路与流程:
我们都知道,人类玩家是可以自主判断敌方玩家哪一位在视线中,哪一位距离自己最近,同时是不是活着的。
而机器人想要做到这点可不容易。
经过几日的研究,我反复的在工坊里实验各个相关功能的组合,终于成功地实现了上述的功能。
首先我们来看要做到这一步需要的几个条件。
1. 在视线中的玩家。
2. 存活的玩家。
3. 距离最近的玩家。
根据这三个条件,我们自然会联想到三个动作:在视线内、所有存活的玩家、距离最近的玩家。
那么,就好像拼图游戏一样,只要拼对了,自然就能获得想要的答案。
三个工具,相互组合,组法不多,按理来说只要用穷举法就可以得出正确的组合。
但事实上并未如此。
根据我的实验,在“距离最近的玩家”动作下套嵌“所有存活的玩家”,系统依然会返回距离最近的玩家,
即使他已经死亡;而在“所有存活的玩家”动作下套嵌“距离最近的玩家”,则只返回第一次检测到的玩家,
并不能根据距离变化。
那么这该怎么办呢?
这个时候我们就要用到“已过滤的数组”和“已排序的数组”两个动作了。
在已排序的数组中,选择所有存活的玩家作为等待排序的数组。
在排序的条件中,选择相距距离,开始位置为事件玩家,结束位置为当前数组元素。
由此,我们就能得到在所有存活的玩家中,距离我们最近的玩家了。
下一步,就要判断是否在视线中了。
工坊中有两个动作可以判断目标是否被物体遮挡,一个是“在视线内”,另一个是“范围中的玩家”。
后者对于物体的遮挡非常的敏感,及腰高的矮墙或汽车就能算作遮挡,因此我们不选择它作为判断视线的工具。
我们先使用“已过滤的数组”,选择“已排序的数组”作为过滤的数组,在已排序的数组中重复上述步骤,
最后在过滤的条件中使用“在视线内”,开始位置为事件玩家,结束位置为当前数组元素。
至此,我们便制作出了一个数组三重套的结构,并且可以有效地判断视线中距离最近的存活玩家了。
以上便是这个系统的思路和制作流程,希望可以帮到各位。
评论
这里空空如也~