ARSession работает, но без конфигурации

Когда я бегу ARSession с ARWorldTrackingSessionConfiguration sceneView.session свойство не похоже на конфигурацию. Это мой код

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

    // Create a session configuration
    let configuration = ARWorldTrackingSessionConfiguration()

    configuration.planeDetection = .horizontal

    // Run the view's session
    sceneView.session.run(configuration)
}

Я ставлю точку останова на sceneView.session.run(configuration) и это дало мне следующее

po sceneView.session
<ARSession: 0x1c83c8520 currentFrame=0x0 timestamp=0.000000 configuration=(null)>

Замечания: configuration=(null)

Я позже пытаюсь получить доступ sceneView.session.currentFrame но это дает мне ноль, поэтому я предполагаю, что вышеупомянутое является проблемой.

Я запускаю его на iPad Pro 2017, он поддерживает ARWorldTrackingSessionConfigurationи я также пытался только с помощью ARSessionConfiguration но это дает мне то же самое.

Кто-нибудь еще испытывал это? Сейчас это выглядит как ошибка ARKit, так как мой код взят прямо из документации. Есть идеи?

1 ответ

У меня была такая же проблема. И, похоже, ARSession запускается не сразу. Я решаю это, используя небольшую задержку:

    sceneView.session.run(configuration)
    DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { [weak sceneView] in
        guard let cameraTransform = sceneView?.session.currentFrame?.camera.transform else { return }
        /* now you can use cameraTransform */
    }

Через 0,2 - 0,5 секунды сессия начинает правильно определять текущий кадр. Но перед первым использованием фрейма следует подождать это короткое время. Я скрыл эти 0,5 секунды с анимацией "открытия камеры", поэтому пользователь не увидит эту задержку.

Другие вопросы по тегам