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
相关产品推荐
相关产品推荐

