【Unity】【C#】《U3d人工智能编程精粹》学习心得--------操纵行为--抵达(进入减速范围)

本文介绍如何在Unity3D中使用C#编写抵达行为(Steering For Arrive),并详细解释了如何通过判断距离来调整角色的速度,实现平滑减速直至停止的过程。文章包含完整的代码示例。

增加Steering的派生类

---SteeringForArrive   抵达行为类

抵达减速范围解读图:

案例代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SteeringForArrive : Steering {

    public GameObject target;
    private Vehicle m_vehicle;
    private Vector3 desiredVelocity;
    private float maxSpeed;

    public bool isPlanar = true;
    public float arrivalDistance = 0.3f; 
    public float characterRadius = 1.2f;

    public float slowDownDistance;

    private void Start()
    {
        m_vehicle = GetComponent<Vehicle>();
        maxSpeed = m_vehicle.maxSpeed;
        isPlanar = m_vehicle.isPlanar;

    }

    public override Vector3 Force()
    {
        //到目标的距离矢量
        Vector3 toTarget = target.transform.position-transform.position;

        //预期速度
        Vector3 desiredVelocity;
        //返回操控向量
        Vector3 returnForce;

        if (isPlanar)
            toTarget.y = 0;
        float distance = toTarget.magnitude;

        if (distance > slowDownDistance)
        {
            desiredVelocity = toTarget.normalized * maxSpeed;
            returnForce = desiredVelocity - m_vehicle.velocity;
        }
        else
        {
            desiredVelocity = toTarget - m_vehicle.velocity;
            returnForce = desiredVelocity - m_vehicle.velocity;
        }
        return returnForce;
    }

    private void OnDrawGizmos()
    {
        Gizmos.DrawWireSphere(target.transform.position, slowDownDistance);
    }

}

参考书籍:《unity3d人工智能编程精粹》 王洪源等著

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值