如何在Unity中编写右键按住缩放复位的C#相机脚本?
Unity右键相机缩放与复位脚本实现
以下是实现按住鼠标右键时相机小幅缩放、松开后复位的C#脚本,直接挂在相机对象上即可使用:
using UnityEngine; public class RightClickZoom : MonoBehaviour { // 缩放后的目标FOV(透视相机),按需调整数值 [SerializeField] private float zoomedFOV = 50f; // 缩放过渡的平滑速度,数值越大过渡越快 [SerializeField] private float smoothSpeed = 5f; private float originalFOV; private Vector3 originalPosition; private void Start() { // 记录相机初始状态,作为复位基准 originalFOV = Camera.main.fieldOfView; originalPosition = transform.position; } private void Update() { // 按住鼠标右键时执行缩放 if (Input.GetMouseButton(1)) { // 平滑过渡到缩放后的FOV Camera.main.fieldOfView = Mathf.Lerp(Camera.main.fieldOfView, zoomedFOV, smoothSpeed * Time.deltaTime); // 若要通过位置移动实现缩放,取消下方注释并调整偏移量 // transform.position = Vector3.Lerp(transform.position, originalPosition + Vector3.forward * 1f, smoothSpeed * Time.deltaTime); } // 松开右键时立即恢复初始状态 else if (Input.GetMouseButtonUp(1)) { Camera.main.fieldOfView = originalFOV; transform.position = originalPosition; } } }
关键逻辑说明
- 初始状态记录:在
Start()中保存相机的初始FOV和位置,确保复位时能精准回到初始状态。 - 输入检测:通过
Input.GetMouseButton(1)检测右键持续按住状态,Input.GetMouseButtonUp(1)捕捉右键松开动作。 - 缩放方式选择:默认用修改透视相机FOV实现缩放(符合玩家对“缩放”的直观认知);如果是正交相机,可将FOV相关代码替换为修改
Camera.main.orthographicSize;也能通过相机前后移动实现缩放,脚本中已给出注释示例。 - 平滑过渡:用
Mathf.Lerp和Vector3.Lerp实现流畅的缩放/复位动画,避免画面跳转感。
使用注意事项
- 将脚本拖到场景中的主相机对象上。
- 在Inspector面板调整
zoomedFOV(缩放后视野)和smoothSpeed(过渡速度)到合适数值。 - 若使用正交相机,需修改代码中的FOV逻辑为正交相机的
orthographicSize参数。
内容的提问来源于stack exchange,提问作者Yo-Kai Guy
相关产品推荐
相关产品推荐

