Ошибка предварительного просмотра с SwiftUI и RealityKit - значение типа ARView не имеет элемента raycast

У меня проблемы с предварительным просмотром в Xcode 11.4. Мой код работает, когда мой телефон подключен, поэтому это не проблема кода, но при отключении сборка всегда терпела неудачу. Я хотел бы иметь возможность работать над своим проектом с другими файлами, не использующими AR, без этой ошибки. Когда я возобновляю предварительный просмотр этих других файлов, я блокируюсь из-за этой ошибки. Я уже поместил несколько строк в файл info.plist (использование камеры конфиденциальности и необходимые возможности устройства), но все еще не работает. Есть идея ?

import SwiftUI
import RealityKit


struct ContentView : View {
    var body: some View {

         return ARViewContainer().edgesIgnoringSafeArea(.all)
    }
}

struct ARViewContainer: UIViewRepresentable {

    func makeUIView(context: Context) -> ARView {
        let arView = ARView(frame: .zero)
        arView.enablePlacement()

        return arView

    }

    func updateUIView(_ uiView: ARView, context: Context) {}

}

extension ARView {
    func enablePlacement() {
        let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap(recognizer:)))
        self.addGestureRecognizer(tapGestureRecognizer)
    }

    @objc func handleTap(recognizer: UITapGestureRecognizer) {
        let location = recognizer.location(in: self)

        let results = self.raycast(from: location, allowing: .estimatedPlane, alignment: .vertical)

       if let firstResult = results.first {
            let mesh = MeshResource.generateBox(width: 0.5, height: 0.02, depth: 0.2)
            var material = SimpleMaterial()
            material.baseColor = try! MaterialColorParameter.texture(TextureResource.load(named: "glacier"))
            let modelEntity = ModelEntity(mesh: mesh,materials: [material])
            let anchorEntity = AnchorEntity(world: firstResult.worldTransform)
            anchorEntity.addChild(modelEntity)
            self.backgroundColor = .orange
            self.scene.addAnchor(anchorEntity)

        }else{
            print("No Surface detected - move around device")
        }
    }
}
#if DEBUG
struct ContentView_Previews : PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
#endif

Значение error типа "ARView" не имеет элемента "raycast".

Невозможно вывести контекстную базу по отношению к члену «EstimatedPlane».

Невозможно вывести контекстную базу в отношении элемента "вертикаль".

Снимок экрана


person jim diGGler    schedule 17.05.2020    source источник
comment
Привет, Джим, добро пожаловать в ТАК! Вы должны ввести ошибку в самом сообщении, а не связывать ее, поскольку ссылка может исчезнуть в любой момент и не позволить будущим людям с аналогичной проблемой, как и вы, получить надлежащий контекст о том, что происходит.   -  person iOShit I Screwed Up    schedule 18.05.2020


Ответы (1)


Многие символы RealityKit недоступны в Симуляторе. Я думаю, что ваше единственное решение - удалить их из сборок Simulator с помощью

#if !targetEnvironment(simulator)
/ ** /
#endif
person jlsiewert    schedule 19.05.2020