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

