自动行为操控Steering(九)—徘徊(单体操控)

来源:互联网 发布:破解三星s4支持4g网络 编辑:程序博客网 时间:2024/06/06 01:56

图示:


实现

    ///<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);        }    }



阅读全文
0 0