【问题标题】:URL updated for GeoAnchors in RealityKit with anchor info after being removed from ARView从 ARView 中删除后,使用锚信息更新 RealityKit 中 GeoAnchors 的 URL
【发布时间】:2021-09-25 12:44:40
【问题描述】:

我正在使用 Apple 的 GeoTrackingExample 项目:

GeoTrackingExample

并且逻辑中存在一个错误,即在您重置 AR 会话后,它仍会在 URL 中保留锚点信息。所以步骤如下:

  1. 启动应用程序
  2. 在视图中点击并放置一个对象
  3. 从菜单中选择重置 AR 会话
  4. 在视图中点击以放置对象
  5. 从菜单中选择保存锚点
  6. 将文件保存到设备
  7. 重置 AR 会话
  8. 加载保存的文件

当文件加载时,它将加载在步骤 2 中放置在 AR 视图中然后在步骤 3 中删除的初始对象以及在步骤 4 中放置的添加对象。它应该只保存在步骤 4 中添加的对象,而不是第 2 步和第 4 步中的两个对象。在逐步调试代码时,似乎锚已从 ARview 中删除,但不知何故 URL 将包含两个锚的路径。我还需要做些什么来清除以前会话中的对象不会添加到当前会话中的 URL 中?将对象添加到 ARView 时是否修改了 URL?请帮忙!谢谢

【问题讨论】:

  • 我发现逻辑问题,当一个会话被重置时, arView.scene.anchors.removeAll() 语句被执行但没有清除一个全局变量: var currentAnchors: [ARAnchor] { return arView. session.currentFrame?.anchors ?? [] }。我不是 100% 肯定的,但看起来这个语句在每次将锚添加到场景时都会在数组中添加一个元素,但在场景中的锚被移除时不会被清除。

标签: swift xcode geolocation arkit realitykit


【解决方案1】:

Apple 的示例代码使用计算变量来存储场景中放置的 Geoanchors 数组,但由于计算变量是只读的,因此在重置场景时无法删除数组中的值,因此它保留了一个每次将模型添加到场景中时都会出现长列表,但无法删除它们(据我所知)。通过不使用计算变量并相应地修改代码来解决此问题:

  1. var currentAnchors: [ARAnchor] = [] // 来自

var currentAnchors: [ARAnchor] { 返回 arView.session.currentFrame?.anchors ?? []}

  1. 当锚点放置在场景中时,将地理锚点附加到数组中

  2. 在重置AR会话函数中添加currentAnchors.removeAll()

不确定这是否对任何人都有帮助,但我很高兴我想通了!

** 有人知道他们为什么使用计算变量来存储 AR 锚点吗?

【讨论】:

    猜你喜欢
    • 2021-08-28
    • 2020-10-23
    • 1970-01-01
    • 2020-05-11
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    相关资源
    最近更新 更多