Unity ARKit SetWorldOrigin - 错误的旋转

Unity ARKit SetWorldOrigin - Wrong Rotation

我尝试使用 SetWorldOrigin

设置新的位置和方向作为原点

我正在使用 Unity 2018.3.0f2 和 ARKit 2.0

我的起始对齐方式是:"Unity AR Alignment Gravity And Heading"

在我的室外测试环境中,我有一个可视化北向的已知点。我可以在这一点上放置一个游戏对象 (newOriginGO) 并将其旋转到可视化的北方方向。问题是,虚拟对象被旋转到错误的位置。我只测试了翻译,这很有效。 这是一个代码片段:

GameObject translationToLastPosition = new GameObject();
GameObject rotateToNewRotation = new GameObject();
GameObject translationToNewPosition = new GameObject();

translationToLastPosition.transform.position = -lastOriginP;
rotateToNewRotation.transform.eulerAngles = lastOriginR - newOriginGO.transform.eulerAngles;
translationToNewPosition.transform.position = lastOriginP - newOriginGO.transform.position;

UnityARSessionNativeInterface.GetARSessionNativeInterface().SetWorldOrigin(translationToLastPosition.transform);
UnityARSessionNativeInterface.GetARSessionNativeInterface().SetWorldOrigin(rotateToNewRotation.transform);
UnityARSessionNativeInterface.GetARSessionNativeInterface().SetWorldOrigin(translationToNewPosition.transform);

lastOriginP = newOriginGO.transform.position;
lastOriginR = newOriginGO.transform.eulerAngles;

因为 SetWorldOrigin 需要一个相对变换,我正在围绕最后一个原点旋转我的游戏对象,使用 transform.RotateAround(lastOriginP, Vector3.up, angle),我试图将 WorldOrigin 平移回最后一个原点,旋转 WorldOrigin然后翻译回实际位置。是我思维有误,还是我没有完全理解方法 SetWorldOrigin 的工作原理? ARKit SetWorldOrigin 如何影响 Unity World Space 坐标系?

好吧,我终于找到了另一个解决方案。我没有使用 ARKit 更改 WorldOrigin,而是将我所有的 3D 对象作为一个空游戏对象的子对象。然后我用我的修正值(平移和旋转)改变了这个游戏对象。