Swift – ARMeshAnchor 到数据转换
Swift – ARMeshAnchor to Data conversion
在我的项目中,我试图将 ARMeshAnchor 存储到 UserdDefaluts 中,并将其转换为数据。我找不到解决方案。
这是我的错误之一
实例方法 encode(_:forKey:)
要求 ARMeshAnchor
符合 Encodable
.
也许将它们转换为 SCNNode 并尝试将节点转换为数据更好?
谢谢
为此您应该使用 NSKeyedArchiver
class 并且您的代码可能如下所示:
@IBOutlet var arView: ARView!
fileprivate func convertMeshAnchors() -> UserDefaults {
guard let frame = arView.session.currentFrame else { return }
let meshAnchors = frame.anchors.compactMap { [=10=] 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
在我的项目中,我试图将 ARMeshAnchor 存储到 UserdDefaluts 中,并将其转换为数据。我找不到解决方案。
这是我的错误之一
实例方法 encode(_:forKey:)
要求 ARMeshAnchor
符合 Encodable
.
也许将它们转换为 SCNNode 并尝试将节点转换为数据更好?
谢谢
为此您应该使用 NSKeyedArchiver
class 并且您的代码可能如下所示:
@IBOutlet var arView: ARView!
fileprivate func convertMeshAnchors() -> UserDefaults {
guard let frame = arView.session.currentFrame else { return }
let meshAnchors = frame.anchors.compactMap { [=10=] 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