首页 > 解决方案 > Swift – ARMeshAnchor 到数据的转换

问题描述

在我的项目中,我试图将 ARMeshAnchor 存储到 UserdDefaluts 中,并将其转换为 Data。我无法找到解决方案。

这是我的错误之一实例方法encode(_:forKey:)要求ARMeshAnchor符合Encodable.

也许将它们转换为 SCNNode 并尝试将节点转换为 Data 更好?

谢谢

标签: swiftaugmented-realityscenekitarkitrealitykit

解决方案


为此,您应该使用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

推荐阅读