swift - 从 ARView 中删除后,使用锚信息更新 RealityKit 中 GeoAnchors 的 URL
问题描述
我正在使用 Apple 的 GeoTrackingExample 项目:
并且逻辑中存在一个错误,即在您重置 AR 会话后,它仍然保留 URL 中的锚信息。所以步骤如下:
- 启动应用
- 点击 arview 并放置一个对象
- 从菜单中选择重置 AR 会话
- 点击 arview 以放置对象
- 从菜单中选择保存锚点
- 将文件保存到设备
- 重置 AR 会话
- 加载保存的文件
当文件加载时,它将加载在步骤 2 中放置在 AR 视图中然后在步骤 3 中删除的初始对象以及在步骤 4 中放置的添加对象。它应该只保存在步骤 4 中添加的对象,而不是同时保存来自第 2 步和第 4 步的对象。在逐步调试代码时,似乎锚已从 ARview 中删除,但不知何故 URL 将包含两个锚的路径。我还需要做些什么来清除以前会话中的对象不会添加到当前会话中的 URL 中?将对象添加到 ARView 时是否修改了 URL?请帮忙!谢谢
解决方案
Apple 的示例代码使用计算变量来存储场景中放置的 Geoanchors 的数组,但由于计算变量是只读的,因此在重置场景时无法删除数组中的值,因此它每次都会保留一个长列表将模型添加到场景而无法删除它们的时间(据我所知)。通过不使用计算变量并相应地修改代码来解决问题:
- var currentAnchors: [ARAnchor] = [] // 来自
var currentAnchors: [ARAnchor] { return arView.session.currentFrame?.anchors ?? []}
当锚点放置在场景中时,将地理锚点附加到数组
在重置 AR 会话函数中添加 currentAnchors.removeAll()
不确定这是否对那里的任何人都有帮助,但我很高兴我想通了!
** 有人知道他们为什么使用计算变量来存储 AR 锚点吗?
推荐阅读
- gradle - 构建 Gradle 项目的问题:错误消息“org.gradle.api.internal.tasks.DefaultSourceSetOutput 类型的功能测试类”
- azure-functions - vpn 中存在的事件网格订阅 webhook
- android - RecyclerView:使用 RxJava 在后台进行计算工作
- c# - C#如何在WPF中取消上一个按钮单击事件处理程序
- centos - 将 KVM 虚拟机导出到 HyperV
- postman - sendRequest 似乎没有使用我在测试中指定的标头值
- c# - 如何通过代码隐藏将多个 div 添加到现有的父 div
- three.js - 在 ThreeJS 中画线
- ios - pod install 后 Xcode 标头搜索路径不正确
- reactjs - 使用 Webpack 4 和 react js 在 scss 中导入字体或图像文件时出错