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

Unity 2D拖拽卡牌朝向鼠标时异常旋转问题咨询

问题根源

你使用的Quaternion.LookRotation是为3D场景设计的旋转计算方法,它会同时处理X/Y/Z三轴的旋转对齐逻辑。但在2D游戏中,我们只需要卡牌绕Z轴旋转朝向鼠标,这个方法会错误引入Y轴旋转——当鼠标对应的世界空间方向向量与默认UP轴(Y轴)的空间关系发生翻转时,就会出现Y轴180度旋转的问题。

另外,在无碰撞体的区域,ScreenToWorldPoint因缺少射线检测约束,计算出的鼠标Z轴位置可能出现逻辑异常,进一步放大了3D旋转方法在2D场景中的适配问题。

解决方法

替换LookRotation,改用2D场景专用的旋转计算方式,仅计算绕Z轴的旋转角度:

Vector3 mousePos2 = Camera.main.ScreenToWorldPoint(Input.mousePosition);
// 固定Z轴与卡牌一致,消除3D空间干扰
mousePos2.z = transform.position.z;
Vector2 direction = mousePos2 - transform.position;

// 计算2D平面内绕Z轴的旋转角度
float targetAngle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
// 生成仅绕Z轴旋转的四元数
Quaternion targetRotation = Quaternion.Euler(0, 0, targetAngle);

float degreesPerFrame = 90.0f * Time.deltaTime;
transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation, degreesPerFrame);

关键修改点

  • 让鼠标位置的Z轴与卡牌位置Z轴保持一致,确保方向向量是纯2D平面内的向量,彻底消除3D空间的干扰。
  • 使用Mathf.Atan2计算2D平面内的旋转角度,直接生成绕Z轴的四元数,完全规避Y轴旋转的问题。

额外优化(可选)

如果拖拽逻辑依赖碰撞体检测鼠标位置,可在无碰撞体区域手动限制鼠标的世界空间范围,确保ScreenToWorldPoint计算出的坐标始终处于游戏板的2D平面内,避免异常Z轴值影响计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:22:12