Path Following
路径跟随
- 原理:
- Path following 行为产生一个操控力,使交通工具沿着构建路径的一系列路点(Waypoint)移动。
- 路径类型
- 线性-有起点和终点
- 循环型- 封闭路径
- wander也可以用这种方式来实现,即把这些路径点让智能体来随机选取进行移动。
实现的原理
- 判断下一个节点是不是终点,如果是终点就采取arrival行为,不是终点就将target的节点数组++然后采取Seek行为。
Unity 中的代码实现
- 首先我们需要在场景中为智能体添加路径点(transform)
- 接着给智能体添加pathFollowing的脚本,并且为脚本添加需要使用到的字段
- 将场景中的wayPoint添加到pathPoints的数组里
- 接着进行操控力的获取
如果当前的目标点已经是最后一个点了,进行arrival行为,从而开始进行判断,智能体是否到达了减速半径以内如果没有到达就用Seek,到达了减速半径则使用arrival(arrival里直接包括了Seek行为)。
如果不是最后一个目标点
通过使用dist(距离向量)的模小于0.2f(假设值)来判断已经到达了当前目标点,数组下标++,重置target,继续Seek行为。
通过获得的操控力控制智能体移动
- 演示:
Interpose(插入)
- Interpose行为返回一个操控力操控角色移到2个智能体(或空间两点,或一个智能体与一个点)的中点。
- 预测(猜测)算法:得到连接两智能体当前位置的线的中点,计算:从交通工具到该点的距离/交通工具的最大速度=交通工具走完这段距离的时间T;使用T推断2个智能体未来位置,得到两智能体未来位置的线的中点,最后交通工具使用arrive行为移向该点。
原理图:
C++伪代码: