在 Unity 中沿垂直轴镜像对象



在 Unity 中,我想沿 x 轴对称镜像变换,对于许多形状,这工作正常:

reflection.localRotation = new Quaternion(
        original.localRotation.x * -1f,
        original.localRotation.y,
        original.localRotation.z,
        original.localRotation.w * -1f
        );
reflection.localPosition = new Vector3(
        original.localPosition.x * -1f,
        original.localPosition.y,
        original.localPosition.z
        );

但是沿 y 轴镜像的代码是什么?那么沿z轴的镜子呢?定位部分很容易,但我想知道四元数部分。谢谢!

在3D中,你并不是真正沿着轴镜像,而是关于一个平面。

Unity 论坛中有一个关于此的主题。其中一种解决方案提出了一种不仅针对特定轴对齐平面旋转,而且针对由法线表示的任何镜像平面旋转的方法。

var objectQuat = transform.rotation;
var plane = GetMirrorPlane(); // choose yours here
var mirrorNormalQuat = new Quaternion(plane.x, plane.y, plane.z, 0);
var reflectedQuat = mirrorNormalQuat * objectQuat * mirrorNormalQuat;
transform.rotation = reflectedQuat;
手动

修改四元数(将其视为普通的 Vector4(不会给你正确的结果。修改transform.eulerAngles会好得多(当你想通过全局轴镜像时,我会想象eulerAngles比localEulerAngles更合适,但你可以使用任何一个(

仍然在内部转换为四元数,但在使用欧拉坐标系时,它更容易理解您在旋转方面的位置

最新更新