目標直線追隨移動
在Unity中,要做到對目標追隨移動有兩種基本方法可以使用,Lerp及MoveTowards.
在Vector系列的類別中,都內含著上述兩個方法.
Lerp
用來取得兩點間線性插值的方法,語法為new Vector3 newPosition = Vector3.Lerp(Vector3 起點, Vector3 終點, float 比例) .
其中比例的值為一個浮點數,範圍為0~1,可以想像成0%~100%,當比例 <= 0 時,相當於不動,即newPosition = 起點; 反之,如果比例 >= 1時,newPosition = 終點. 所以一般使用時將比例控制在0~1之間,可以適當地得到兩個點之間某個比例的位置.
MoveTowards
用來取得兩點間的某個點的位置,語法為new Vector3 newPosition = Vector3.MoveTowards(Vector3 起點, Vector3 終點, float 距離) .
其中距離的值為一個浮點數,無範圍限制,主要就是看你希望每一次期望取得離終點多遠的距離.
下面是利用Lerp來實作的一個簡單的物件追隨範例:
public class CameraFollower : MonoBehaviour {
public Transform target;
private float smoothing = 5f;
private Vector3 offset;
// Use this for initialization
void Start () {
offset = transform.position - target.position;
}
// Update is called once per frame
void FixedUpdate () {
Vector3 camPosition = target.position + offset;
transform.position = Vector3.Lerp (transform.position,camPosition,smoothing*Time.deltaTime);
}
}
public Transform target;
private float smoothing = 5f;
private Vector3 offset;
// Use this for initialization
void Start () {
offset = transform.position - target.position;
}
// Update is called once per frame
void FixedUpdate () {
Vector3 camPosition = target.position + offset;
transform.position = Vector3.Lerp (transform.position,camPosition,smoothing*Time.deltaTime);
}
}