注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

穷到掉渣的超级奶爸阿赵

阿赵的博客

 
 
 

日志

 
 

队伍群组寻路  

2013-10-19 14:09:33|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
在之前写的网格寻路功能的基础上,加上了队伍群组寻路的功能。有些朋友可能会搞混,这个不是Unity3D自带的那个寻路功能,是自己重新写的。这个方法原则上能用在所有的平台,因为只是一些纯数学的计算。这里用Unity3D来表现,只是因为unity是可视化的操作,比较直观。
在默认的情况下,队伍的成员可以分散在地图的各个位置,当点击地图,让他们有一个目标点之后,各个成员就开始集合了。
队伍群组寻路 - 阿赵 - 有爪的小羔羊阿赵
 
在默认的情况下,队伍成员是分别各自做寻路运算,然后用群聚的算法让他们互相保持距离而又组成集体的往目标点移动。不过这种情况下,队伍不一定是整体移动,某些成员可能会找到更近的路,然后到达目的地。
队伍群组寻路 - 阿赵 - 有爪的小羔羊阿赵
 
这么多个队员,体积有大有小,但可以互相保持安全的距离。
队伍群组寻路 - 阿赵 - 有爪的小羔羊阿赵
 
刚才说的是默认的情况,也有不是默认的情况的,把这个isKeepGroup选项打钩,那么寻路就会以队伍为整体只寻路一次,然后整个队伍保持在一起的前进
队伍群组寻路 - 阿赵 - 有爪的小羔羊阿赵
 
这就是只寻路一次的效果了,只有一条路径线。这样的情况会减少寻路运算的次数,不过只适合整个队伍肯定是呆在一起的情况,如果有队员分散在其他地方,将会影响准确性。
队伍群组寻路 - 阿赵 - 有爪的小羔羊阿赵
 
这时候不会再有队员去找捷径了,都是保持在一起。
队伍群组寻路 - 阿赵 - 有爪的小羔羊阿赵

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

 
  评论这张
 
阅读(1460)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016