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

Unity正交相机拖拽上下速度过慢,如何实现各方向移动速度一致?

解决正交旋转相机拖拽速度不一致的问题

问题出在你直接用ScreenToWorldPoint获取世界坐标计算拖拽方向——相机旋转后,屏幕上下移动对应的世界X/Z轴分量比例失衡,导致移动速度不一致。直接改加速度没用,得从坐标转换的根源上调整。

核心思路:用屏幕坐标的偏移量计算移动,而非世界坐标差值,再把屏幕偏移转换成相机视角下的世界空间移动,保证各方向速度一致。

修改后的代码如下:

// 类成员变量
private bool isDragged;
private Vector2 touchStartScreenPos;
private Camera mainCam;

void Start()
{
    mainCam = Camera.main;
}

void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        isDragged = true;
        // 记录按下时的屏幕坐标,而非世界坐标
        touchStartScreenPos = Input.mousePosition;
    }
    else if (Input.GetMouseButtonUp(0))
    {
        isDragged = false;
    }

    if (isDragged && Input.GetMouseButton(0))
    {
        // 计算屏幕上的拖拽偏移量
        Vector2 screenDelta = touchStartScreenPos - (Vector2)Input.mousePosition;
        touchStartScreenPos = Input.mousePosition; // 更新起始位置,避免累积误差

        // 计算屏幕像素对应的世界单位缩放因子
        // 正交相机下,屏幕高度对应2*orthographicSize的世界高度
        float worldUnitsPerPixelY = mainCam.orthographicSize * 2f / Screen.height;
        // 用宽高比修正X轴缩放,保证屏幕左右/上下的速度一致
        float worldUnitsPerPixelX = worldUnitsPerPixelY * mainCam.aspect;

        // 将屏幕偏移转为相机本地空间的移动(本地X对应屏幕左右,本地Z对应屏幕上下)
        Vector3 localMove = new Vector3(screenDelta.x * worldUnitsPerPixelX, 0, screenDelta.y * worldUnitsPerPixelY);
        // 转换到世界空间,自动适配相机旋转角度
        Vector3 worldMove = mainCam.transform.TransformDirection(localMove);
        worldMove.y = 0; // 保持Y轴高度不变

        // 计算新位置并限制范围
        Vector3 newPosition = mainCam.transform.position + worldMove;
        newPosition.x = Mathf.Clamp(newPosition.x, -45, 45);
        newPosition.z = Mathf.Clamp(newPosition.z, -45, 45);

        mainCam.transform.position = newPosition;
    }
}

关键修改点说明:

  • 放弃用ScreenToWorldPoint记录起始点,改用原始屏幕坐标,避免相机旋转带来的坐标扭曲
  • 利用正交相机的orthographicSize和屏幕尺寸,精准计算屏幕像素对应的世界单位长度,保证屏幕左右/上下的移动缩放一致
  • 将屏幕偏移转为相机本地空间移动,再通过TransformDirection转到世界空间,让移动方向自动适配相机旋转,同时速度保持均匀

这样修改后,不管相机旋转角度如何,屏幕拖拽的左右和上下移动速度都会一致,且Y轴高度保持不变,X/Z范围限制也能正常生效。

内容的提问来源于stack exchange,提问作者Максим

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:22:28