2016年5月11日 星期三

AI 追隨目標減速到達

---------------------------------------------------------------------
SteeringForArrive 類別(功能: 減速到達)
---------------------------------------------------------------------
using UnityEngine;
using System.Collections;

public class SteeringForArrive : Steering {

    public bool isPlaner = true;
    public float arrivalDistance = 0.3f;        // 距離到達
    public float characterRadius = 1.2f;        // 角色半徑
    public float showDownDistance;
    public GameObject target;
    private Vector3 desiredVelocity;
    private Vehicle vehicle;
    private float maxSpeed;

    void Start() {

        vehicle = GetComponent<Vehicle>();
        maxSpeed = vehicle.maxSpeed;
        isPlaner = vehicle.isPlanar;
    }

    public override Vector3 Force()
    {
        Vector3 toTarget = target.transform.position - transform.position;
        Vector3 desiredVelocity;
        Vector3 returnForce;

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

        // 如果AI與目標距離之間大於設定的距離減速半徑
        if (distance > showDownDistance) {
            // 預期速度AI與目標之間的距離
            desiredVelocity = toTarget.normalized * maxSpeed;
            // 傳回預期速度與目前速度差
            returnForce = desiredVelocity - vehicle.velocity;
        }else{
            // 計算預期速度,並傳回預期速度與目前速度差
            desiredVelocity = toTarget - vehicle.velocity;
            // 傳回預期速度與目前速度的差
            returnForce = desiredVelocity - vehicle.velocity;
        }

        return returnForce;
    }

    void OnDrawGizmos() {
        // 繪製圓形圖示
        Gizmos.DrawWireSphere(target.transform.position, showDownDistance);
    }
}

沒有留言:

張貼留言