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

Unity C#:如何判断带Rigidbody的2D矩形飞船相对自身的左右移动方向

判断Unity飞船相对于自身的左右移动方向

嘿,这个问题我太熟悉了!在Unity里,直接用全局的Rigidbody.velocity判断自身方向的移动肯定会出问题——因为飞船旋转后,自身的左右和全局坐标系的轴已经不对齐了。核心解法是把全局空间的速度向量转换到飞船的局部坐标系,这样就能直接用自身的轴来判断啦。

具体步骤

  • 第一步:获取飞船的全局速度
    先拿到刚体的全局速度向量:

    Rigidbody rb = GetComponent<Rigidbody>();
    Vector3 globalVelocity = rb.velocity;
    
  • 第二步:转换到局部空间
    使用Transform.InverseTransformDirection()方法,把全局向量转换成相对于飞船自身的局部向量:

    Vector3 localVelocity = transform.InverseTransformDirection(globalVelocity);
    

    转换完成后,localVelocity.x对应的就是飞船自身的左右方向(x正方向是自身右侧,x负方向是自身左侧),localVelocity.z则对应自身前后方向。

  • 第三步:判断自身左右移动
    根据局部速度的x分量就能轻松判断,建议加个阈值避免浮点误差干扰:

    float movementThreshold = 0.1f; // 可以根据游戏需求调整这个值
    
    if (Mathf.Abs(localVelocity.x) < movementThreshold) {
        Debug.Log("飞船没有左右方向的移动");
    } else if (localVelocity.x > 0) {
        Debug.Log("飞船正在向自身右侧移动");
    } else {
        Debug.Log("飞船正在向自身左侧移动");
    }
    

对应你提到的场景验证

比如你说的情况:飞船向前加速后旋转90°,此时全局移动方向和飞船自身右侧对齐——转换后的localVelocity.x会是正数,就能正确判断是向自身右侧移动;如果再旋转180°,全局移动方向和飞船自身左侧对齐,localVelocity.x会是负数,对应自身左侧移动,完全匹配你的需求。

额外小提示

如果你的飞船有旋转速度(比如正在转向),但你只想判断当前移动方向相对于自身的左右,上面的方法依然适用——因为我们只关心当前的速度向量在自身坐标系下的投影,和旋转过程无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:14:20