在Unity中沿垂直轴镜像对象?

时间:2018-03-12 09:57:53

标签: unity3d quaternions symmetry

在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轴镜像是什么?定位部分很简单,但我想知道四元数部分。谢谢!

2 个答案:

答案 0 :(得分:1)

在3D中,您不是沿着轴实际镜像,而是关于平面。

有一个thread in the Unity forum。其中一个解决方案提出了一种方法,不仅可以旋转特定的轴对齐平面,还可以旋转法线所代表的任何镜像平面。

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;

答案 1 :(得分:0)

手动修改四元数(将其视为普通的Vector4)将不会给你正确的结果。修改transform.eulerAngles会更好(并且你想要通过全局轴镜像我想象eulerAngles比localEulerAngles更合适但你可以使用它们)

它仍在内部转换为Quaternion,但在使用Euler coordintate系统时,它更容易理解旋转方面的位置