swift - Swift – ARMeshAnchor 到数据的转换
问题描述
在我的项目中,我试图将 ARMeshAnchor 存储到 UserdDefaluts 中,并将其转换为 Data。我无法找到解决方案。
这是我的错误之一实例方法encode(_:forKey:)
要求ARMeshAnchor
符合Encodable
.
也许将它们转换为 SCNNode 并尝试将节点转换为 Data 更好?
谢谢
解决方案
为此,您应该使用NSKeyedArchiver
类,您的代码可能如下所示:
@IBOutlet var arView: ARView!
fileprivate func convertMeshAnchors() -> UserDefaults {
guard let frame = arView.session.currentFrame else { return }
let meshAnchors = frame.anchors.compactMap { $0 as? ARMeshAnchor }
let data = try! NSKeyedArchiver.archivedData(withRootObject: meshAnchors,
requiringSecureCoding: false)
let savedAnchors = UserDefaults.standard
savedAnchors.set(data, forKey: "MeshAnchors")
savedAnchors.synchronize()
return savedAnchors
}
请记住,在 RealityKit 中还有一个场景对象位于锚点集合所在的位置:
arView.scene.anchors
推荐阅读
- android - 如果 WebView 遵循替代链接,则返回时会进入无限循环
- python - 如何根据 PID 获取正在运行的 IE 实例
- javascript - phpmyadmin+mysql 实时拉取数据
- java - byte[] 可以转换成连续的输入流
- angular - Ngx-Indexed-db - 数据未保存在 Microsoft Edge 浏览器中,引发数据错误
- python - 如果未找到元素,脚本将不起作用
- c# - 流未打开以供阅读
- php - Sendinblue SMTP 在 CodeIgniter 中不起作用
- regex - jflex正则表达式除零以外的任何数字
- kubernetes - 如何在 Keycloak 启动时添加/修改 LDAP 用户联合