Swift – ARMeshAnchor для преобразования данных

#swift #augmented-reality #scenekit #arkit #realitykit

#swift #дополненная реальность #scenekit #arkit #realitykit

Вопрос:

В моем проекте я пытаюсь сохранить ARMeshAnchor в UserdDefaluts, преобразуя его в данные. Я не могу найти решение.

Это один из моих ошибок Метод экземпляра encode(_:forKey:) требует, чтобы ARMeshAnchor соответствовать Encodable .

Может быть, лучше преобразовать их в SCNNode и попытаться преобразовать узел в данные?

Спасибо

Ответ №1:

Для этого вы должны использовать NSKeyedArchiver class, и ваш код может выглядеть следующим образом:

 @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
  

Комментарии:

1. Я думаю, что requiringSecureCoding этот параметр также должен быть false связан с ARAnchor.supportsSecureCoding возвратами false .