如何使用unity和ARKit将职位转换为应用程序的起点?

时间:2018-11-14 08:57:58

标签: unity3d arkit

尝试开发AR应用程序。打开该应用程序时,设备位置为(0,0,0),即如果我打印或显示坐标,则该设备位置为(0,0,0)。我想创建一个门入口处的起点。当其他使用我的应用程序的用户可以在任何地方打开该应用程序。

我想做的是我已经在门的入口处保留了一个AR。用户在任意位置打开应用程序成为起点,所有AR对象都会出现。当他们通过该AR对象时,我想要其设备的坐标为(0,0,0)。但是,如果我在统一编辑器中运行以下代码,它将摄像头移至应用启动的位置。定位到应用的起点。

            Camera.main.transform.position=new Vector3(0,0,0);

据我了解,如果我们更改相机在应用中的位置,它可能会显示毛刺

1 个答案:

答案 0 :(得分:1)

您的问题非常不清楚-.-

但是如果尝试将摄像机重置为(0,0,0),同时将所有游戏对象保持在相同的相对位置,则可以尝试

    var localToCamera = Camera.main.transform.worldToLocalMatrix;
    var obj = GameObject.FindSceneObjectsOfType(typeof(GameObject));
    foreach (var o in obj)
    {
        var go = (o as GameObject);
        go.transform.FromMatrix(localToCamera * go.transform.localToWorldMatrix);
    }

_

编辑:

上面的 UGLY 代码应该做什么: 它将爬过所有GameObject并以如下方式重新放置它们:如果将摄像机设置为位置(0,0,0)并面向(0,0,1),则它们将相对于相机。

注意,执行此代码后,相机本身将重新定位为(0,0,0)并面向(0,0,1),因为

Camera.main.transform.worldToLocalMatrix * localToWorldMatrix ==身份

编辑

我不能将这段代码放在注释中,因为它太长了。

尝试

// code from the top of my head here, syntax or function names might not be exact
var forward = arcamera.transform.forward;
forward.y = 0;
arcamera.transform.rotation = Quaternion.LookDirection(forward);
// now the camera forward should be in the (x,z) plane
UnityARSessionNativeInterface.GetARSessionNativeInterface().SetWorldOrigin(arcamera.transform);
// since you did not tilt the horizontal plane, hopefully the plane detection still detected vertical and horizontal planes