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

如何解决2D俯视角弓箭按鼠标旋转时中心偏移问题?

2D俯视角弓箭跟随鼠标旋转问题排查

我在做2D俯视角游戏的弓箭跟随鼠标方向旋转功能,照着教程写的代码,但出现了异常——旋转时看起来中心是光标而非弓箭的游戏对象。我确认游戏对象本身没有移动到光标位置,当前使用的代码如下:

void FixedUpdate()
{
    Vector2 difference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
    float rotZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;

    transform.rotation = Quaternion.Euler(0, 0, rotZ + offset);
}

可能的解决方向:

  • 检查相机投影模式:2D游戏务必用正交投影,如果是透视投影,Input.mousePosition的Z值为0,转换后的世界坐标会靠近相机,导致差值计算偏差,视觉上就会出现旋转中心偏移的错觉。
  • 修正鼠标世界坐标的Z值:如果必须用透视相机,给鼠标位置设置正确的Z值,比如取相机到弓箭对象的距离:
    void FixedUpdate()
    {
        // 计算相机与对象的Z轴距离,修正鼠标世界坐标
        float zDistance = Camera.main.transform.position.z - transform.position.z;
        Vector3 mouseWorldPos = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, zDistance));
        Vector2 difference = mouseWorldPos - transform.position;
        float rotZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
    
        transform.rotation = Quaternion.Euler(0, 0, rotZ + offset);
    }
    
  • 检查弓箭的Transform原点:确认弓箭Sprite的锚点(或Transform的位置)是否在模型视觉中心。如果锚点在边缘,代码计算的旋转中心是Transform位置,视觉上就会错位,这时候需要调整Sprite锚点到中心,或者移动Transform位置匹配视觉中心。
  • 核对offset偏移值:如果弓箭默认朝向不是右侧,offset需要对应调整(比如默认朝上就加90),偏移值错误也会导致视觉上的旋转中心错位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 06:22:20