首页 > 解决方案 > Unity3D相同的Matrix4x4不同的欧拉

问题描述

我有适用于欧拉角的脚本,它在 Windows PC 和 Android 设备上的行为不同。

我有相同的 Matrix4x4 作为输入,但欧拉角不一样。

测试代码:

var matrix = new Matrix4x4(
    new Vector4(-1, 0, 0, 0),
    new Vector4(0, 1, 0, 0),
    new Vector4(0, 0, 1, 0),
    new Vector4(0, 0, 0, 1)
);

var eulers = matrix.rotation.eulerAngles;

Windows 设备上欧拉的内容(0, 180, -5.12263832E-05)我认为是正确的,但在 Android 设备上它是(309.394653, 318.791473, 256.987244).

这显然弄乱了我的代码。您是否知道如何“标准化”这些结果以使两个欧拉相同?

该矩阵由返回Tilemap.GetTransformMatrix(Vector3Int position)并应表示图块的方向。

标签: c#unity3dmatrixeuler-angles

解决方案


您的矩阵不是旋转矩阵(实际上,它是关于 YZ 平面的反射),因此没有为它定义欧拉角的概念。当矩阵不是旋转矩阵时,文档Matrix4x4.rotation没有指定任何行为,因此您应该假设它可以返回任何东西,甚至是不同平台上的不同值。


推荐阅读