直接上代码
using UnityEngine;
using System.Collections;
/*任务:控制摄像机视野的放大和缩小,望远镜功能
* 原理:放大事业:就是减小摄像机的垂直视野范围(减小FOV值)
* 缩小视野:就是增加摄像机的垂直视野范围(增加FOV值)
*/
public class SniperRifleView : MonoBehaviour
{
public int magnify = 2;//放大倍数
public float magnifySpeed = 50f;//放大速度
public float shrinkSpeed = 50f;//缩小速度
public Camera m_camera;//指定的摄像机
private float initFov;//摄像机垂直视野的范围的初始值
void Start ()
{
initFov = m_camera.fieldOfView;//设置视野的初始值
}
void Update ()
{
if (Input.GetKey(KeyCode.Mouse0))//按下左键放大视野
{
MagnifyView();
}
else //否则缩小视野(带原有视野)
{
ShrinkView();
}
}
/// <summary>
/// 放大视野
/// </summary>
private void MagnifyView()//放大视野就是,减小FOV的值
{
//如果现在FOV-下一帧的视野值,还大于原有视野值的一半,就继续减少视野值,放大视野
if ((m_camera.fieldOfView - Time.deltaTime * magnifySpeed) >= (initFov / magnify))
{
m_camera.fieldOfView -= Time.deltaTime * magnifySpeed;
}
else//否则保持视野值到最小值
{
m_camera.fieldOfView = initFov / magnify;
}
}
/// <summary>
/// 缩小视野
/// </summary>
private void ShrinkView()
{
//如果现在FOV+下一帧的视野值,还小于原有视野值的一半,就继续增减视野值,缩小视野
if ((m_camera.fieldOfView + Time.deltaTime * magnifySpeed) <= initFov)
{
m_camera.fieldOfView += Time.deltaTime * shrinkSpeed;
}
else//否则保持视野值到初始垂直视野值
{
m_camera.fieldOfView = initFov;
}
}
}
效果图: