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 对象作为一个空游戏对象的子对象。然后我用我的修正值(平移和旋转)改变了这个游戏对象。
我尝试使用 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 对象作为一个空游戏对象的子对象。然后我用我的修正值(平移和旋转)改变了这个游戏对象。