unity3d編寫緩動跟隨攝像機
阿新 • • 發佈:2021-02-18
首先宣告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緩動追蹤相機
調整引數後可以得到如下效果