c# - 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)
并应表示图块的方向。
解决方案
您的矩阵不是旋转矩阵(实际上,它是关于 YZ 平面的反射),因此没有为它定义欧拉角的概念。当矩阵不是旋转矩阵时,文档Matrix4x4.rotation
没有指定任何行为,因此您应该假设它可以返回任何东西,甚至是不同平台上的不同值。
推荐阅读
- kubernetes - 是否可以在 Azure Kubernetes 服务等托管 Kubernetes 集群上应用和维护 CIS 基准合规性?
- arrays - Powershell 获取内容 + 数组
- c# - XAML 将列表转换为控件列表
- single-sign-on - Pingfederate kerberos 身份验证正在对来自任何域的任何用户进行身份验证
- c# - 如何查询 UWP 应用程序中的特定列?
- c++ - 使用佳能 EDSDK 时出现未定义的引用错误
- r - 分区数据,同时保留带有插入符号的组
- react-native - 是否可以重定向到 youtube 应用程序?
- python - Django html页面不显示我在视图中传递的变量
- android - 如何从 lib/sdk 获取最终应用程序的 BuildConfig.DEBUG 值