该组件源码,主要通过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.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. 通过主副流场设计,解决了下图中目标被拥堵造成流场失效问题。

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模式
6.2. 100个目标,2000个Monster
frameTimes =11.28, FPS=55 ,运行比较流畅。
联系作者
作者:fangtx,邮箱:fangtx2011@163.com,微信号Fangtx2011
版权声明
图片资源,为CC协议资源 请用于自己的游戏的商业化,请勿公开传播本代码。
购买须知
- 本产品为付费虚拟商品,一经购买成功概不退款,请支付前谨慎确认购买内容。
- 购买过之前版本的朋友,可以联系本人微信Fangtx2011,可以3折购买。 创作不易,谢谢支持!


















