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

Unity 2D:鼠标拖拽相机时每次开始拖拽都会复位至(0,0)求助

问题原因

你的拖拽逻辑计算错误,导致每次开始拖拽时相机被错误重置到(0,0)附近。核心问题出在dragOffset的计算和相机位置更新的公式上,逻辑完全颠倒,错误抵消了相机当前位置。

修复方案

修改拖拽阶段的相机位置计算逻辑,核心是保持按下鼠标时鼠标相对于相机的偏移量,拖拽时让相机跟随鼠标移动,始终维持这个偏移不变。

修复后的完整脚本:

using UnityEngine;

public class CameraMovement : MonoBehaviour
{
    Camera cam;
    Vector2 mouseWorldOffset; // 按下鼠标时,鼠标相对于相机的世界空间偏移

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

    void Update()
    {
        // 将鼠标像素位置转换为世界位置
        Vector3 mousePixPos = Input.mousePosition;
        mousePixPos.z = cam.nearClipPlane;
        Vector3 mouseWorldPos = cam.ScreenToWorldPoint(mousePixPos);

        if (Input.GetMouseButtonDown(2))
        {
            // 记录鼠标相对于相机的偏移:鼠标世界位置 - 相机当前位置
            mouseWorldOffset = new Vector2(mouseWorldPos.x - transform.position.x, mouseWorldPos.y - transform.position.y);
        }

        if (Input.GetMouseButton(2))
        {
            // 相机新位置 = 鼠标当前世界位置 - 之前记录的偏移量,保持Z轴不变
            transform.position = new Vector3(mouseWorldPos.x - mouseWorldOffset.x, mouseWorldPos.y - mouseWorldOffset.y, -10);
        }
    }
}
逻辑说明
  • 按下鼠标中键时,记录鼠标世界位置与相机当前位置的差值,这个差值就是鼠标相对于相机的固定偏移,拖拽过程中需要维持这个偏移不变。
  • 拖拽过程中,相机的新位置直接用当前鼠标世界位置减去该偏移量,这样鼠标移动时,相机就会同步跟随,不会出现复位问题。

内容的提问来源于stack exchange,提问作者MikeOxlong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:36:18