1. 程式人生 > 其它 >unity3d編寫緩動跟隨攝像機

unity3d編寫緩動跟隨攝像機

技術標籤:unity3D開發相關unity3dunity

首先宣告target為需要跟隨的物體

public Transform target;

宣告跟隨距離,以及跟隨距離的增長速度,使用滑鼠滾輪可以拉伸鏡頭

public float viewDistance = 8f;
public float viewDistanceMoveSpeed = 1f;

宣告緩動係數

public float springRatio = 0.05f;

然後在LateUpdate函式裡編寫程式碼,因為攝像機追蹤需要發生在物體移動後。
首先滑鼠滾輪可以拉伸鏡頭

viewDistance += Input.
GetAxis("Mouse ScrollWheel") * viewDistanceMoveSpeed;

之後使用Vector3.MoveTowards將相機移動到目標地點。目標地點的座標計算過程如下。
target.transform.forward得到目標物體當前朝向的前方在世界座標系下的方向,和Vector.foraward是不同的。之後用目標物體減去這個值,就是當前目標物體所朝方向的後方。
然後攝像機需要稍稍在y軸方向向上移動,可以給人一種略微俯視的感覺。
最後增加進緩動係數來移動攝像機

this.transform.position = Vector3.MoveTowards
(transform.position, target.transform.position - target.transform.forward * viewDistance + Vector3.up *viewDistance*0.5f, (moveSpeed + distance * springRatio) * Time.deltaTime);

最後當攝像機離物體過進的時候,可以隱藏物體,這個在許多遊戲中都有類似的實現

 bool visible = Vector3.Distance(this.transform.position, target.
transform.position) > 1; target.GetComponent<MeshRenderer>().enabled = visible;

完整程式碼如下

using UnityEngine;

public class CameraTrack3D : MonoBehaviour
{
    public Transform target;
    public float moveSpeed = 3;


    public float viewDistance = 8f;
    public float viewDistanceMoveSpeed = 1f;

    public float springRatio = 0.05f;

    void LateUpdate()
    {
        viewDistance += Input.GetAxis("Mouse ScrollWheel") * viewDistanceMoveSpeed;

        var distance = Vector3.Distance(this.transform.position, target.transform.position);

        this.transform.position = Vector3.MoveTowards(transform.position,
            target.transform.position - target.transform.forward * viewDistance + Vector3.up *viewDistance*0.5f,
            (moveSpeed + distance * springRatio) * Time.deltaTime);
        
        this.transform.LookAt(target.position + target.forward * 10);

        bool visible = Vector3.Distance(this.transform.position, target.transform.position) > 1;
        target.GetComponent<MeshRenderer>().enabled = visible;
    }
}

將此程式碼掛載到攝像機上,賦值要跟隨的物體,同時編寫方塊的移動程式碼即可完成一個簡易的3D緩動追蹤相機

調整引數後可以得到如下效果
在這裡插入圖片描述