图示:
实现
///<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); } }