直接上代码 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; } } }
效果图: