- Unity人工智能实战(原书第2版)
- (智利)豪尔赫·帕拉西奥斯
- 481字
- 2021-01-07 11:17:02
1.5 到达和离开
与Seek和Flee行为类似,这些算法背后的思路运用的是同样的原理,然后当满足某个条件时,即要么接近于它的终点(到达),要么远离一个危险点(离开),把功能扩展到agent自动停止的位置点。
准备工作
我们需要分别为Arrive和Leave算法创建一个文件,并且要记得设置它们的自定义执行顺序。
操作步骤
Arrive和Leave使用相同的方法,但是在实现方面,成员变量的名称也随着GetSteering函数前半段的计算值的改变而改变:
1. 首先,使用成员变量实现Arrive行为,以定义停止(目标)和减速的半径:
2. 创建GetSteering函数:
3. 定义GetSteering函数的前半段,这里根据半径变量计算出到达目标点的距离所需要的速度:
4. 定义GetSteering函数的后半段,这里设置steering值并根据最大速度确定steering值:
5. 实现Leave类,修改成员变量的名称:
6. 定义GetSteering函数的前半段:
7. GetSteering函数的后半段与Arrive类的相同。
运行原理
在计算出前进方向之后,接下来的计算基于两个半径的距离,以便知道什么时候加速,什么时候减速,什么时候停止,这也是为什么我们有多个if语句。在Arrive行为中,当agent还很远时,我们全速前进,在快接近半径距离内时就渐渐地减速,并最终在足够接近目标时停止。相反的思路可用于Leave行为,如图1-1所示。