首先获取相机对象:
//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);
}