首页 > 解决方案 > 从 ARView 中删除后,使用锚信息更新 RealityKit 中 GeoAnchors 的 URL

问题描述

我正在使用 Apple 的 GeoTrackingExample 项目:

地理跟踪示例

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

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

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

标签: swiftxcodegeolocationarkitrealitykit

解决方案


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

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

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

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

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

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

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


推荐阅读