Unity人工智能实战(原书第2版)
上QQ阅读APP看书,第一时间看更新

1.6 朝向物体

真实世界中的瞄准,就像在战斗模拟器中一样,与大多数游戏中广泛应用的自动瞄准有些不同。假设你需要实现一个agent来控制坦克炮塔或者狙击手,这正是该方法可以派上用场的时候。

准备工作

AgentBehaviour类做一些修改:

1. 添加新的成员值以限制一些现有的成员值:

2. 添加MapToRange函数,此函数帮助计算出两个方向值相减后的实际旋转方向值:

3. 另外,需要创建一个基础行为类,命名为Align,作为朝向算法的基石。它与Arrive类的原理相同,但仅限于旋转方面:

操作步骤

我们现在继续实现继承自Align类的朝向算法:

1. 创建Face类,包含用于保存目标的一个私有成员变量:

2. 重写Awake函数,用于初始化所有变量和交换引用:

3. 实现OnDestroy函数,用于管理引用和避免内存问题:

4. 定义GetSteering函数:

运行原理

此算法根据agent与实际目标间的向量值计算内部目标的方向值,然后把其余工作委托给父类。