时间:2023-7-29
北京下雨,公司停电,回家早了,更新一下。
寻路模块,还是前前后后,打磨了2个月,中间穿插着搞很多其他的功能,有些螺旋迭代的味道。
进入正题:
1,需求简介:
设计团队,会从游戏性角度考虑,提出很多需求。
基础的需求:
1,单位之间的规避,模型不能穿插
2,建筑物规避,模型不能穿插
3,寻路目标,移动向地方基地、靠近附近敌人
4,单位不能闪烁、卡顿(这也是常见的寻路抖动问题)
更进一步的需求:
1,碰撞等级
1.1 高等级兵种,不会被低等级兵种卡住
1.2 画面层次感,高级单位要推开低等级单位
2,快速包围
2.1 以单个单位为例,当前方有己方单位,要像两侧规避
2.2 包围大型单位,比如地方基地,包围的速度、阵容画面都要考虑
3,快速散开
3.1 当出兵点拥挤了大量同等级单位,要快速散开;
3.2 同时中线的单位数量,像两侧要依次递减
2,查阅到的资料:
1,RVO2:
来自:GitHub,
性能承载:
5k 30FPS,7k 20FPS。虽然不够理想,但也比传统的UnityMonoAgent好多了。
弃用原因:
Rvo2 仅仅是避障,并不是真正意义上的寻路。
如果面前有刚性障碍物,单位会卡住,而不是绕开。
提一下为什么Rvo2卡顿:
Rvo2的原理是线性规划、切割可移动空间,单位越多,切割的细腻,代价就是性能了。
虽然,Rvo2是包含了多线程的,性能依然是堪忧的。
2,AgentsNavigation
来自:UnityStore
Agents Navigation | Behavior AI | Unity Asset Store
性能承载:
8k 30FPS,13k 20FPS
弃用的原因:
达不到我们5万人的寻路需求。
3,FlowField
来自:youtube
https://www.youtube.com/watch?v=I1KX6YM_GeI&t=130s
性能承载:
异常。7k 30FPS,但是当众多单位汇聚到一起,FPS便会暴跌。
弃用的原因:
FlowField 仅仅是在Rvo2的基础上,添加了寻路,性能并不会有太多提升。
同时,FlowFiel 比UnityDots出现更早,官方并没有 Dots版本的。
3,我们的解决方案:
我们是通过自研解决问题的,并没有采用外部的插件
首先推荐一个链接,讲了寻路算法的演化
避障算法 - VO、RVO 以及 ORCA (RVO2)|移动_新浪新闻
1,ECS设计
bake对象时,添加phyCom组件,
在phySystem中计算碰撞,在moveSystem中计算移动、以及转向
2,phyCom 结构
包含单位半径、碰撞等级、拥堵状态、用于计算的中间数据
3,phySystem 逻辑
拥堵状态的检测:统计到自身半径内单位大于4,标记为拥堵
速度控制:拥堵时,速度降低;非拥堵时,恢复原始速度
周围单位统计:用数学dot、cross 判定前后、左右。
unity提供了优化后的数学库,用 math.dot、math.cross ,在job中运行效率更高。
碰撞计算: 根据周围单位的方向、距离,累积推力。
离散计算:
何时向左侧移动,
如果前方单位拥堵,右侧单位也拥堵,左侧单位为空,添加左转的辅助力
何时向右侧移动,
如果前方单位拥堵,左侧单位也拥堵,右侧单位为空,添加右转的辅助力
引力计算:
如果周围有单位,像两侧移动,给自己添加2/3的引力。
这样便有 队形散开的效果
碰撞等级:
高等级的单位,忽略低等级的单位,不计算对应逻辑便可
4,moveSystem 逻辑
合力计算 = 基础速度+碰撞推力+离散辅助力+建筑物推力
当然,这里是思路简介,实际的辅助力会更多。
4,一些作者的话
碰到需求后,先找找资料,减少研发周期、试错成本。
查阅资料后,要整理。验证资料,要耐心。
没有什么现成的东西,让你去CV。
真正的技术,也是牢牢锁在公司的内网库。出于保密,他们也不会公开。
我曾经在百度、bilibili看到他们展示技术,他们做的,就是我们要的。但有粉丝问xxx怎么做,被采访的开发者,只说了5个字,甚至连方向都没说。
我们要自己去 理解需求、查阅资料、组装、设计、改良自己的项目。
资料渠道比如:
baidu、youtube、google 、unity forums、bilibili
国外开发者,会分享一些教程。甚至一些研发历程。
看他们的视频、他们的博客、他们视频简介的说明、也可以勇敢的去邮件交流。
粘贴一个思路链接:
https://www.youtube.com/watch?v=ALL7AQ1MRas
没有做全局规划。
他的工作方式是,每个单位,在一个小半径内环顾四周,
吸引附近单位的质心,并前往同一个目的地。
为了不与附近的单位重叠,他也会排斥附近的单位
根据实体间距离的增加,而衰减文章来源:https://www.toymoban.com/news/detail-721092.html
最后,平衡这些所有的力文章来源地址https://www.toymoban.com/news/detail-721092.html
到了这里,关于Unity 万人寻路(dots版本)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!