【问题标题】:Swift – ARMeshAnchor to Data conversionSwift – ARMeshAnchor 到数据的转换
【发布时间】:2021-01-15 23:59:37
【问题描述】:

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

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

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

谢谢

【问题讨论】:

    标签: swift augmented-reality scenekit arkit realitykit


    【解决方案1】:

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

    【讨论】:

    • 我认为requiringSecureCoding参数应该是false,因为ARAnchor.supportsSecureCoding也返回false
    猜你喜欢
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    相关资源
    最近更新 更多