参考链接
脚本没挂到主摄像机上时。
单倍切换
public bool State;
public bool Switch;
public float zoomLevel = 2.0f;
public float zoomInSpeed = 100f;
public float zoomOutSpeed = 100f;
public float initFOV;
void Start()
{
initFOV = Camera.main.fieldOfView;
}
void Update()
{
//匀速
if (Input.GetMouseButtonDown(1))
{
State = !State;
}
if (State)
{
if (Mathf.Abs((Camera.main.fieldOfView - Time.deltaTime * zoomInSpeed)-initFOV / zoomLevel) >= 0.1f)
{
Camera.main.fieldOfView -= (Time.deltaTime * zoomInSpeed);
}
}
else
{
if (Mathf.Abs((Camera.main.fieldOfView + Time.deltaTime * zoomOutSpeed)-initFOV) <= 0.1f)
{
Camera.main.fieldOfView += (Time.deltaTime * zoomOutSpeed);
}
}
//变速
//if (State && Switch)
//{
// Camera.main.fieldOfView = Mathf.Lerp(Camera.main.fieldOfView, initFOV / zoomLevel, 0.1f);
// if (Mathf.Abs(Camera.main.fieldOfView - 30) < 0.1f)
// {
// Camera.main.fieldOfView = 30;
// Switch = false;
// }
//}
//else if (!State && Switch)
//{
// Camera.main.fieldOfView = Mathf.Lerp(Camera.main.fieldOfView, initFOV, 0.1f);
// if (Mathf.Abs(Camera.main.fieldOfView - 60) < 0.1f)
// {
// Camera.main.fieldOfView = 60;
// Switch = false;
// }
//}
}
脚本挂到摄像机上时。
多倍率循环
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class careamZoom : MonoBehaviour
{
public bool Switch;
public float initFOV;
public List<float> zoomLevels;
private int index=-1;
private Camera mainCamera;
// Start is called before the first frame update
void Start()
{
zoomLevels.Add(Camera.main.fieldOfView);
mainCamera = this.GetComponent<Camera>();
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(1))
{
index = (index + 1) % zoomLevels.Count;
Switch = true;
}
if (Switch)
{
mainCamera.fieldOfView = Mathf.Lerp(mainCamera.fieldOfView, zoomLevels[index], 0.1f);
if (Mathf.Abs(mainCamera.fieldOfView - zoomLevels[index]) < 0.1f)
{
mainCamera.fieldOfView = zoomLevels[index];
Switch = false;
}
}
}
}