unity實現鏡頭拉近拉遠的方式
阿新 • • 發佈:2018-12-09
首先獲取相機物件:
//camera = GetComponent<Camera>(); //指令碼在相機物件上
//GameObject.FindWithTag("MainCamera") //根據Tag查詢
//主相機
camera = Camera.main;
方式一:用標誌位控制近遠兩種狀態切換,一次拉近拉遠
private bool isFar = true; private void Zoom1() { if (Input.GetMouseButtonDown(1)) { //修改縮放等級 isFar = !isFar; if (isFar) { //拉遠 20 --》 60 camera.fieldOfView = 60; } else { //拉近 60 --》 20 camera.fieldOfView = 20; } } }
方式二:逐漸拉近拉遠
private void Zoom2() { if (Input.GetMouseButtonDown(1)) { //修改縮放等級 isFar = !isFar; } if (isFar) { //拉遠 20 --》 60 if (camera.fieldOfView < 60) camera.fieldOfView += 2; } else { //拉近 60 --》 20 if (camera.fieldOfView > 20) camera.fieldOfView -= 2; } }
方式三:速度動態變化,開始快靠近目標時慢
private void Zoom3() { if (Input.GetMouseButtonDown(1)) { //修改縮放等級 isFar = !isFar; } if (isFar) { //拉遠 20 --》 60 Lerp(起點、終點、比例) camera.fieldOfView = Mathf.Lerp(camera.fieldOfView, 60, 0.1f); //Vector3.Lerp //Quaternion.Lerp //Color.Lerp } else { //拉近 60 --》 20 camera.fieldOfView = Mathf.Lerp(camera.fieldOfView, 20, 0.1f); } }
方式四:用陣列控制多個等級的縮放
//60 50 40 30 20 定義縮放等級陣列
public float[] zoomLevels;
private int currentLevel;
private void Zoom()
{
if (Input.GetMouseButtonDown(1))
{
//修改縮放等級
//currentLevel++;
//currentLevel = currentLevel < zoomLevels.Length - 1 ? currentLevel + 1 : 0;
currentLevel = (currentLevel + 1) % zoomLevels.Length;
}
camera.fieldOfView = Mathf.Lerp(camera.fieldOfView, zoomLevels[currentLevel], 0.1f);
}