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 секунды с анимацией "открытия камеры", поэтому пользователь не увидит эту задержку.