上QQ阅读APP看书,第一时间看更新
1.10 避开墙体
本节中要实现的行为效仿人类的能力,当我们面前有一堵墙或者障碍时,通过设置安全距离去避开墙体,同时试着不偏离大方向。
准备工作
这项技术使用物理引擎中的RaycastHit结构体和Raycast函数,所以建议读者复习一下相关文档,以便快速理解本节的主题。
操作步骤
得益于之前内容的介绍,该方法的介绍会比较短:
1. 创建继承于Seek的AvoidWall行为:
2. 添加用于定义安全距离和射线长度的成员变量:
3. 定义Awake函数,用于初始化游戏对象:
4. 定义后面的步骤要用到的GetSteering函数:
5. 声明并设置射线所需要的变量:
6. 发射射线并在射线遇到墙体时做出合理的计算:
运行原理
向agent前方发射一条射线,当射线遇到墙体时,目标对象被就放置到新的位置上,此位置要考虑到到墙的安全距离,然后把转向的计算委托给Seek行为,这样就产生了agent会避开墙的幻觉。
延伸阅读
我们可以通过添加更多射线扩展这个行为,就像胡须一样,以提高准确度,如图1-5所示。另外,这个行为通常与其他移动行为混合搭配使用,比如追赶(Pursue)。
其他参考
关于RaycastHit结构体和Raycast函数的更多信息,请参考网站的官方文档:
▪ http://docs.unity3d.com/ScriptReference/RaycastHit.html
▪ http://docs.unity3d.com/ScriptReference/Physics.Raycast.html