Обнаружение плоскости ARKit - значение типа 'ARView' не имеет члена 'session' - PullRequest
3 голосов
/ 10 июля 2019

Я пытаюсь добавить обнаружение самолета в простое приложение ARKit. Я хочу поставить картинку на вертикальной плоскости.

Итак, сначала мне нужно определить плоскость, затем я могу добавить привязку своего объекта, которую я создал в RealityKit.

Однако проблема в том, что я не уверен в правильном способе определения плоскости и добавления ее в мою сцену с помощью ARKit 3 и Xcode 11.

Это должно быть так просто:

import ARKit
import RealityKit

@IBOutlet var arView: ARView!

override func viewDidLoad() {
    super.viewDidLoad()

    let arConfiguration = ARWorldTrackingConfiguration()
    arConfiguration.planeDetection = .horizontal
    arView.session.run(arConfiguration)
} 

Но я получаю следующую ошибку:

Значение типа 'ARView' не имеет члена 'session'

Я даже попробовал следующее, которое Apple использовало в качестве примера из своей демонстрации WWDC (4:27),

Apple Demo !

let anchor = AnchorEntity(plane: .verticle, minimumBounds: [0.2, 0.2])
arView.scene.addAnchor(anchor)

но я получаю следующую ошибку при попытке создать AnchorEntity

Тип выражения 'AnchorEntity' неоднозначен без дополнительного контекста

import UIKit
import RealityKit
import ARKit

class ViewController: UIViewController {

    @IBOutlet var arView: ARView!

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        // Create a session configuration
    }

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    func addFrame() {
        // Load the "Box" scene from the "Experience" Reality File
        let boxAnchor = try! Experience.loadBox()

        // Add the box anchor to the scene
        arView.scene.anchors.append(boxAnchor)
    }
}

Ответы [ 2 ]

1 голос
/ 11 июля 2019

Вы получаете эту ошибку, если в качестве места назначения сборки выбран Симулятор.Вам нужно выбрать либо «Фактическое устройство», либо «Универсальное устройство iOS».

Я пару раз ударил по этому поводу и теперь добавляю следующий комментарий

    // If the following line fails to compile "Value of type 'ARView' has no member 'session'"
    // You need to select a Real Device or Generic iOS Device and not a simulator
    arView.session.run(configuration)
0 голосов
/ 10 июля 2019

Вы можете использовать класс ARView и его свойства, такие как arView.session и run(config) метод в macOS15 / iOS13 и выше.В macOS 10.14 Mojave и iOS12 вместо этого используют ARSCNView:

@IBOutlet var arScnView: ARSCNView!

arScnView.session.run(arConfiguration)

Вот официальная документация RealityKit .

PS Ошибкиочень возможно в бета-версии программного обеспечения :

Если вы работаете с последними версиями ОС и XCode, но все еще получаете сообщение об ошибке, этому есть простое объяснение: это бета-версия программного обеспечения.Вы можете проверить, содержит ли Apple Game те же строки кода (для запуска конфигурации), что и у вас здесь .

На данный момент Apple RealityKitИнженеры еще не внедрили свойство session для класса ARView в Xcode 11 beta 3.

enter image description here

...