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

图示:


实现

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值