在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轴镜像是什么?定位部分很简单,但我想知道四元数部分。谢谢!
答案 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系统时,它更容易理解旋转方面的位置