Unity 万人寻路(dots版本)

时间:2023-7-29

北京下雨,公司停电,回家早了,更新一下。

文章来源地址https://www.uudwc.com/A/Y62Mg/

寻路模块,还是前前后后,打磨了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://blog.csdn.net/qq_35623058/article/details/132001513

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年09月15日 02:27
下一篇 2023年09月15日 02:29