You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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实现流畅的缩放/复位动画,避免画面跳转感。

使用注意事项

  1. 将脚本拖到场景中的主相机对象上。
  2. 在Inspector面板调整zoomedFOV(缩放后视野)和smoothSpeed(过渡速度)到合适数值。
  3. 若使用正交相机,需修改代码中的FOV逻辑为正交相机的orthographicSize参数。

内容的提问来源于stack exchange,提问作者Yo-Kai Guy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 14:15:46