2017年6月4日 星期日

[Unity]筆記: 目標直線追隨移動

目標直線追隨移動

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