【问题标题】:How to convert a position into starting point for app using unity and ARKit?如何使用统一和 ARKit 将位置转换为应用程序的起点?
【发布时间】:2018-11-23 22:54:10
【问题描述】:

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

我想要做的是我已经在门的入口处保留了一个 AR。用户在成为他们起点的随机位置打开应用程序,所有 AR 对象都会出现。当他们通过 AR 对象时,我想要他们设备的坐标是(0,0,0)。但是如果我在统一编辑器中运行以下代码,它将相机带到应用程序启动的位置。我正在寻找转换入口定位到 App 起点。

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

据我了解,如果我们在应用程序中更改相机的位置,它可能会出现故障

【问题讨论】:

  • 需要更好地理解这一点。您需要保存检查点之类的东西吗?你玩,你到达位置 B,你保存,当你重新开始游戏时,你想从位置 B 开始?
  • 不,对于 AR 应用程序是必需的。当我到达一个点时,我想将该点设置为起点,以便从该点计算距离并进行其他计算。
  • 所以,如果我理解正确,您希望与您提供的相反:移动整个场景,以便相机位于与移动场景相关的(0,0,0)
  • @derHugo 我想通过它时添加一个游戏对象。它被触发并且相机位置/用户位置必须在(0,0,0)。类似于从那个开始的应用程序点。我不想重新启动,但相机位置应该重置。
  • 那么您当前的代码有什么问题/hwat 不起作用?抱歉,我还没有完全理解……是否您想将其设置为 (0,0,0) 还是在寻找其他位置?

标签: unity3d arkit


【解决方案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 代码应该做什么: 它将爬过所有游戏对象并重新定位它们,如果您将相机设置为位置 (0,0,0) 并面向 (0,0,1),它们将保持相对于相同的位置和方向相机。

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

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

编辑

我无法将此代码放入 cmets,因为它太长了。

试试

// 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

【讨论】:

  • 公平地说,这个问题并不是很清楚......但你的答案也是如此。您能否添加更多信息并解释这究竟是做什么的以及它应该如何解决问题?
  • @Daveloper 是的,好多了。不知道这是否是 OP 想要/需要的,但如果是这样的话,这似乎是一个很好的答案。
  • 所以我猜他确实想做我想做的事情,除了我只处理虚拟对象,他实际上需要整个跟踪系统来执行坐标系更改。问题应该说明您使用的是 ARKit 还是 ARCore 或其他任何东西,这些框架肯定具有执行此类坐标更改的基础架构
  • 嘿,我想我想出了这篇文章..我想这就是我想要的。请检查 setWorldOrgin..blogs.unity3d.com/2018/02/16/…
  • @Daveloper 知道如何从该位置减去并使该点成为原点。
猜你喜欢
  • 1970-01-01
  • 2015-10-28
  • 2015-04-05
  • 2020-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-27
相关资源
最近更新 更多