多目标流场+ORCA避障+堵路优化的群体移动算法组件使用说明

该组件源码,主要通过ORCA自动避障、多目标流场寻路算法来实现群体目标移动中的避障、寻路问题。可解决目前弹幕、割草游戏中常遇到的不同群体 在障碍物间跟踪多目标的自主移动 。并增加了 备份流场、近场占位、临时障碍物生成等算法,可靠解决了当目标被Monster包围后,堵路导致流场失效的问题。 通过简单的挂载脚本,即可实现自动识别静态障碍物、动态障碍物参与避障;识别TiledMap中的障碍物层为静态障碍物;识别地图上不规则多边形、圆形为障碍区。同时,项目集成了稠密包围情况下滤波等防抖动算法、障碍物膨胀算法、流场边界处理策略,解决了大部分群体运动问题。帮助初学者、算法开发者快速应用。

1. 静态障碍物

1.1. 一般静态障碍物

如box、wall、tower等障碍物,可以设置成prefab,在运行时自动加载;

1. 在节点下新建一空节点,如node ;

2. 将脚本obstacleCtrl挂载到node节点上;

3. 添加collider2D组件,可以是多边形、圆形、长方形等形状,编辑边界;

4. 保存场景或预制体,在程序正式运行时,会自动识别静态障碍物边界,并删除collider组件,添加为Obstacle。

1.2. 地形障碍物

添加方法与上面相同

1.3. TiledMap自动识别障碍层

1. 在tMap节点上挂载TiledMap和ObstacleCtrl脚本;

2. 设置tiledMap节点;

3. 设置障碍层数量和障碍层名称;

4. 设置scale与节点的scale保持一致;

5. 运行时,自动识别障碍物层并添加为Obstacle。

1.gif

1.4. ObstacleCtrl组件

1. 一般建议不需要更改。

2. 增加了对圆型障碍物支持,该脚本中getColliderObstacle里,引用了convertCircleToPolygon方法,将圆形转为多边形处理,根据需要变更多边形顶点个数,如将8改为XX。

2. 动态障碍物(运动物体、避障体)

1. 移动物体Monster,节点上挂载MonsterCtrl脚本;

2. 设置接近距离,即与目标的距离小于接近距离时,表示到达目标点,停止运动,如近程攻击的设置为Monster与目标两者半径和,远程攻击的设置为攻击距离;

3. 在移动物体Monster下设agent空子节点;

4. 在agent上挂载agentCtrl脚本,设置移动障碍物agent的属性,一般前5条属性,主要是:最大速度、节点半径、 查找邻居距离、最大邻居数量、质量 ;这些属性往往根据需要进行设置。

• 查找邻居距离:不小于两个碰撞体的半径和; • 最大邻居数量:建议不小于被包围的节点的数量; • 质量:对同类Monster可以设置为1,表示大家平分避障责任;对Actor等,以自身移动为主,希望别人避开他,而不希望自己主动避障的特定移动物体,可以设置为极大值。

5. MonsterCtrl和ActorCtrl都是继承自NodeCtrl,在里面实现了setPrefV方法。一般建议 不需要更改本脚本。 也可根据自己需要修改。

6. AgentCtrl脚本为ORCA内部实现, 不需要更改。

3. 堵路优化的多目标流场

ORCA避障,当有障碍物夹在目标与行动节点之间时,很多情况下会卡滞。此时需要寻路算法进行自主寻路。 对群体节点而言,流场寻路算法简单有效。

1. 流场寻路算法对斜方向运动目标,有可能在静态障碍物顶点处发生卡滞,本算法加入了障碍物膨胀算法,可使运动节点平滑转向;

2. 通过主副流场设计,解决了下图中目标被拥堵造成流场失效问题。

image 76.png

3. 可以同时支持场景多个目标,多组Monster分别对各自目标进行寻路;

4. FlowField文件夹下的文件,不需要挂载,一般不需要修改 。由GameCtrl等文件调用流场管理器相关方法。

4. 游戏主控制器

4.1. 挂载脚本

在场景Canvas下挂载GameCtrl脚本

4.2. 设置参数:

• 多目标流场参数设置; • ORCA优化参数设置;

4.3. GameCtrl脚本

• 注意初始化gameInit和Update中的方法调用顺序

5. 脚本文件说明

1. 需要挂载的一般只有ActorCtrl、MonsterCtrl、GameCtrl、AgentCtrl、ObstacleCtrl五个脚本,需要在编辑界面设置参数;

2. 需要根据实际情况变更的一般只有Enum(资源枚举)和GameCtrl脚本;

3. 其他脚本及文件夹加入到自己项目中即可使用。

6. 实测情况

6.1. debug模式

各目标流场动态调整.gif 拥堵不会导致流场寻路失效.gif

6.2. 100个目标,2000个Monster

frameTimes =11.28, FPS=55 ,运行比较流畅。

联系作者

作者:fangtx,邮箱:fangtx2011@163.com,微信号Fangtx2011

版权声明

图片资源,为CC协议资源 请用于自己的游戏的商业化,请勿公开传播本代码。

购买须知

  • 本产品为付费虚拟商品,一经购买成功概不退款,请支付前谨慎确认购买内容。
  • 购买过之前版本的朋友,可以联系本人微信Fangtx2011,可以3折购买。 创作不易,谢谢支持!
1赞