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);
}
}
沒有留言:
張貼留言