【问题标题】:Unity AR Rotate Scene to match reference pointUnity AR 旋转场景以匹配参考点
【发布时间】:2022-05-08 15:40:58
【问题描述】:

如何通过位置和旋转匹配 2 个不同 AR 场景中的参考点?

以下是有关我的项目的一些详细信息: 我有 2 个场景:“新扫描”和“加载扫描”。在“新扫描”场景中,我实例化了一个 3d 立方体,并使所有其他点都与它相关。这是我的参考点。然后我再实例化一些点,最后将所有数据保存到设备(我的手机)。 接下来,在“加载扫描”中,我再次加载场景并在完全相同的世界位置实例化立方体。现在,我设法为每个点设置了正确的位置,但轴是旋转的,因为我从不同的真实世界位置和不同的手机旋转开始场景。 基于在同一个地方实例化的立方体,我需要匹配场景的旋转和位置,以便点将出现在与第一个立方体相同的相对位置。

注意:可以假设立方体将在用户站在与所需位置相同的方向时实例化。但不要假设用户以与“新扫描”场景相同的方向开始“加载扫描”场景(这会影响整个场景旋转)。

这是问题的可视化: 新扫描图像:

负载扫描图像:

谢谢

【问题讨论】:

    标签: unity3d arcore


    【解决方案1】:

    如果您想确保立方体在每个 AR 会话中出现在相同的位置/旋转中,您有几个选项:

    • 使用图像标记
    • 使用 ARWorldMap(iOS 独占)
    • 使用云跟踪解决方案(谷歌云锚点/Azure 空间锚点)

    当然,您也可以尝试让用户自己正确放置立方体,或者重新设计您的应用程序以使其在没有这些限制的情况下工作。

    【讨论】:

    • 对不起,我没看懂你的回答。问题是每次我打开应用程序时,轴都会根据手机旋转而改变,例如在第一张图像中,立方体 X 轴上的线条。在下一张图片中,它们再次位于立方体的 X 轴上。但是由于我从第一个场景的起始方向开始 90 度的场景,我们得到了 Y 轴上的线(第一个立方体)。不知何故,我需要计算旋转并再次匹配(不知道如何)
    • 啊,我误解了你对立方体放置的假设。我会修改我的答案。
    【解决方案2】:

    所以我找到了一个解决方案,但这不是最终的解决方案:

    首先,创建一个具有公共静态参数的类,以便我们可以将其传递给其他脚本和场景。像这样的东西:

    public static class SceneStage 
    {
       public static int ResetScene = 0;
    }
    

    现在,每次打开相机时,检查 SceneStage.ResetScene 状态。如果 value == 0 什么都不做,否则让用户面向期望的方向站立然后按下一个按钮,这会调用函数 ResetScene:

    private void ResetScene(int _scene)
    {
        var xrManagerSettings = UnityEngine.XR.Management.XRGeneralSettings.Instance.Manager;
        xrManagerSettings.DeinitializeLoader();
        SceneManager.LoadScene(_scene); // reload current scene
        xrManagerSettings.InitializeLoaderSync();
    }
    

    在这里,我将场景构建索引发送到函数:

    ResetScene(SceneManager.GetActiveScene().buildIndex);
    

    所以基本上,流程是这样的:我们第一次打开场景(当 SceneStage.ResetScene = 1 时)-> 将值更改为 0,然后重置场景。第二次不做任何事情,但是当我们离开场景时,将值设置回 1,这样下一个场景也会重置(因为 ARpose 驱动程序仍在跟踪环境)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-07
      • 2018-01-31
      • 2020-03-08
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 2018-04-05
      相关资源
      最近更新 更多