自动行为操控Steering(六)—逃避(与拦截方向相反,单体操控)

来源:互联网 发布:网络火词2016 编辑:程序博客网 时间:2024/05/16 10:41

图示:


实现:

///<summary>    ///逃避    ///</summary>    public class EscapeSteering : Steering    {        public float safeDistance=15;        public override Vector3 ComputerFinalForce()        {            float angle = Vector3.Angle((target.transform.position - this.transform.position).normalized, this.transform.forward.normalized);            //if(Mathf.Acos(angle))            //目标距离            float distance = Vector3.Distance(target.transform.position, this.transform.position);            //目标速度            float targetSpeed = target.GetComponent<Vehicle>().currentForce.magnitude;            //时间            var time = distance / (speed + targetSpeed);            //目标在推断时间内行走的距离=速度*时间            var moveDistance = targetSpeed * time;            //拦截点位置=目标自身位置+目标在推断时间内行走的距离            Vector3 interceptPoint = target.transform.position + (target.transform.position).normalized * moveDistance;            if (distance > safeDistance) return Vector3.zero;            //期望=拦截点位置-自身位置            exceptForce = (interceptPoint-transform.position ).normalized * speed;            //实际=当前-期望            return (vehicle.currentForce - exceptForce) * weight;        }    }


阅读全文
1 0
原创粉丝点击