NavMesh队伍群组寻路

demo视频
在之前写的网格寻路功能的基础上,加上了队伍群组寻路的功能。有些朋友可能会搞混,这个不是Unity3D自带的那个寻路功能,是自己重新写的。这个方法原则上能用在所有的平台,因为只是一些纯数学的计算。这里用Unity3D来表现,只是因为unity是可视化的操作,比较直观。
在默认的情况下,队伍的成员可以分散在地图的各个位置,当点击地图,让他们有一个目标点之后,各个成员就开始集合了。
这里写图片描述

在默认的情况下,队伍成员是分别各自做寻路运算,然后用群聚的算法让他们互相保持距离而又组成集体的往目标点移动。不过这种情况下,队伍不一定是整体移动,某些成员可能会找到更近的路,然后到达目的地。
这里写图片描述

这么多个队员,体积有大有小,但可以互相保持安全的距离。
这里写图片描述

刚才说的是默认的情况,也有不是默认的情况的,把这个isKeepGroup选项打钩,那么寻路就会以队伍为整体只寻路一次,然后整个队伍保持在一起的前进
这里写图片描述

这就是只寻路一次的效果了,只有一条路径线。这样的情况会减少寻路运算的次数,不过只适合整个队伍肯定是呆在一起的情况,如果有队员分散在其他地方,将会影响准确性。
这里写图片描述

这时候不会再有队员去找捷径了,都是保持在一起。
这里写图片描述

最后说一下原理:
原来的方法是:获取了路径点就直接在路径点之间移动角色。
现在改为了,让角色通过向量来移动。
影响角色移动的向量的因素有:
1、下一个路径点的位置。
2、旁边是否有其他的角色,如果有,给他一个排斥的方向向量,并根据两者之间的距离减少而增大排斥的向量大小。
3、还要有一个地形障碍的排斥力和队伍整体移动的平均向量的影响,这样队伍就可以动态绕过一些小型的障碍,并保持和队伍一致的前进。
4、得到角色应该走的向量方向后,先判断一下向量的大小,假如向量太小,就没必要去移动他了,让他原地先等一下,不然如果不判断向量大小都移动,那么人物很有可能在两个不停变动的小力之间不停的抖动。
5、判断角色应该移动之后,先把向量归一标准化,然后就可以乘以移动的速度,作为角色最后实际的移动速度了。
6、最后判断是否到达目的地。由于现在这么多的成员需要到达目的地,那么肯定有些队员是到不了目的地就被其他队员挡住了。那么就需要自己去设定到达的规则,可以是在队伍大部分成员都进入某个范围之内,就算到达,或者是看到前面的多个队员已经到达了,而自己也不能再移动了,那么就算是到达了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值