首页 > 解决方案 > Unity ARKit SetWorldOrigin - 旋转错误

问题描述

我尝试将新的位置和方向设置为原点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工作原理?ARKitSetWorldOrigin如何影响 Unity World Space 坐标系?

标签: c#iosunity3darkit

解决方案


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


推荐阅读