队列(Alignment)行为
队列行为视图保持AI角色的运动朝向与邻居一致,这样就会得到像鸟群朝着一个方向飞行的效果。
通过迭代邻居,可以求出AI角色朝向向量的平均值以及速度向量的平均值,得到想要的朝向,然后减去AI角色的当前朝向,就可以得到队列操控力。
C#脚本代码
using UnityEngine;
namespace AI.Steering
{
/// <summary>
/// 队列
/// </summary>
public class SteeringForCohesion : Steering
{
//雷达
public Radar radar = new Radar();
public override Vector3 GetForce()
{
//通过雷达扫描得到周围邻居
var allNeighbour = radar.SanNeighbours(transform.position);
//当前AI角色的邻居平均朝向
Vector3 averageDirection = new Vector3(0, 0, 0);
for (int i = 0; i < allNeighbour.Length; i++)
{//朝向向量进行累加
averageDirection += allNeighbour[0].transform.forward;
}
//将累加得到的朝向向量除以邻居的个数,求出平均朝向向量
averageDirection /= (float)allNeighbour.Length;
//平均朝向向量减去当前朝向向量,得到操控向量
averageDirection -= transform.forward;
return averageDirection;
}
}
}
测试:
- 创建多个Cube物体。
- 并把所有的Cube物体的标签设置为neighbour
- 赋给所有Cube物体LocomotionController脚本和SteeringForCohesion脚本。
- 运行
运行:
在Scene面板中,当你旋转其中一个物体时,其他物体的转向相同方向。