图示:
实现
///<summary>
///徘徊
///</summary>
public class WanderSteering : Steering
{
//与徘徊圆的距离
public float wanderDistance = 20;
//徘徊圆的半径
public float wangderRadius = 5;
//最大偏移值
public float maxOffset = 5;
//改变目标点的间隔时间
public float changeInterval = 1;
private Vector3 circleTarget;
public override void Init()
{
base.Init();
//先在圆周随便找一个点做为目标
circleTarget = new Vector3(wangderRadius, 0, 0);
//重复调用改变目标
InvokeRepeating("GetNewTarget", 0, changeInterval);
}
private void GetNewTarget()
{
//在原目标点上随机做偏移得到一个新目标点
circleTarget += new Vector3(Random.Range(-maxOffset, maxOffset),
Random.Range(-maxOffset, maxOffset),
Random.Range(-maxOffset, maxOffset));
//将新目标点投射到圆周上
circleTarget = circleTarget.normalized * wangderRadius;
//计算得到目标点的世界坐标
circleTarget = transform.position + transform.forward * wanderDistance + circleTarget;
//改变目标
}
public override Vector3 ComputerFinalForce()
{
exceptForce = (circleTarget - transform.position).normalized * speed;
return (exceptForce - vehicle.currentForce) * weight;
}
public void OnDrawGizmos()
{
var wanderCenter = transform.position + transform.forward * wanderDistance;
Gizmos.color = Color.yellow;
Gizmos.DrawLine(transform.position, wanderCenter);
Gizmos.DrawSphere(circleTarget, 1);
Gizmos.color = Color.red;
Gizmos.DrawWireSphere(wanderCenter, wanderDistance);
}
}