orca避障+群体寻路组件使用说明

该组件在orca避障基础上增加了流场寻路算法,两者结合,可实现目前弹幕、割草游戏中常遇到的群体自主移动。通过简单的挂载脚本,即可实现精灵自动识别为静态障碍物、动态障碍物参与避障;识别TiledMap中的障碍物层为静态障碍物;识别地图上不规则多边形为障碍区。同时,项目集成了稠密包围情况下滤波等防抖动算法、障碍物膨胀算法、流场边界处理策略,解决了大部分群体运动问题。帮助初学者、算法开发者快速应用。

一、一般静态障碍物

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

  1. 在节点下新建一节点,如node ;
  2. 将脚本obstacleCtrl挂载到node节点上;
  3. 确定碰撞区数量:box、poly的数量;这个boxcollider只是为了编辑界面进行显示,正式运行时无效。
  4. 编辑各个碰撞区边界;

  1. 保存场景,在程序正式运行时,会自动识别静态障碍物边界,并删除collider组件。

二、地图上限制通过的障碍区域

也可将地图节点设置为预制体,动态加载。

  1. 在地图节点下新建一节点,如node ;
  2. 将脚本obstacleCtrl挂载到node节点上;
  3. 确定碰撞区数量:box、poly的数量;这个boxcollider只是为了编辑界面进行显示,正式运行时无效。
  4. 编辑各个碰撞区边界,;

  1. 保存场景,在程序正式运行时,会自动识别静态障碍物边界,并删除collider组件。

三、移动避障体

  1. 在需要移动避障的节点actor下,新建一个名为“agent”的空子节点;
  2. 在agent上挂载AgentCtrl脚本;
  3. 设置移动避障体的参数:主要是半径、最大速度、 查找邻居距离、最大邻居数量

查找邻居距离,不小于两个碰撞体的半径和;

最大邻居数量,建议不小于被包围的节点的数量;

  1. 在actor上,新建一个脚本组件actorCtrl;

  1. actorCtrl继承NodeCtrl基类组件;
  2. 在actorCtrl里实现setPrefV方法即可;

setPrefV,设置actor不需要避障时的默认移动速度。

四、TiledMap地图上自动识别障碍物层

  1. 在TiledMap节点(如tMap)上挂载ObstacleCtrl脚本
  2. 在设置里加载tMap节点;
  3. 输入障碍物层的层数
  4. 输入障碍物层名字的字符串
  5. 指定TiledMap的实际缩放比例scale

五、运行ORCA

  1. 在场景的Canvas下新建空子节点,如orca;
  2. 在orca子节点上挂载ORCACtrl脚本;

  1. 可选择调试、防抖动等设置;
  2. 程序运行中,即可自动识别动静态障碍物进行避障。

六、流场寻路算法

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

  1. 流场寻路算法对斜方向运动目标,有可能在静态障碍物顶点处发生卡滞,本算法加入了障碍物膨胀算法,可使运动节点平滑转向;
  2. 流场寻路算法主要在FlowField文件夹下的脚本,FlowFieldMgr文件用单例实现了流场算法及debug,RayCastingPolygonDetection文件是射线法点-in-多边形检测,脚本都加注了大量说明,方便理解;
  3. 游戏主脚本GameCtrl中的start中引入初始化,update引入流场寻路算法,每帧根据目标点是否移动进行更新;
  4. monster在每帧的setPrefV方法中,自动生成寻路方向。
  5. FlowFieldMgr中加入了debug功能,在场景中可勾选是否打开debug模式,可方便显示流场各个位置的方向、权重等信息, 打开debug时会严重卡滞, 关掉即可。

七、备注

  1. 上述动静态障碍物、TiledMap节点都可设置为预制体,支持动态加载;
  2. 支持程序中动态删除,删除时直接删除节点即可,障碍体会自动删除;
  3. 为确保识别准确,动态障碍物的缩放,不会影响半径等属性,需要手动设置这些属性。

图全部挂了

图片看不到

商城地址呢,这么好的插件必须购买一个。