Я занимаюсь разработкой приложения AR Drawing и обнаружил ошибку / проблему в AR Kit 3. Отслеживание мира перестает работать, и 3D-объекты, добавленные в представление AR, заморожены.
Мое приложение переключается между передняя и задняя камера, в обоих случаях я включаю World Tracking.
1. Я включаю сеанс задней камеры следующим образом:
let configuration = ARWorldTrackingConfiguration()
configuration.isLightEstimationEnabled = true
configuration.planeDetection = [.horizontal, .vertical]
if #available(iOS 13.0, *) {
configuration.frameSemantics = [.personSegmentationWithDepth]
}
sceneView.session.run(configuration)
Все работает идеально, если я просто запускаю эту конфигурацию в сеансе сцены.
2. Когда я переключаюсь на фронтальную камеру вот так:
let configuration = ARFaceTrackingConfiguration()
if #available(iOS 13.0, *) {
configuration.isWorldTrackingEnabled = true
}
configuration.isLightEstimationEnabled = true
if #available(iOS 13.0, *) {
configuration.frameSemantics = [.personSegmentation]
}
sceneView.session.run(configuration)
Все по-прежнему работает отлично.
3. Но когда я переключаюсь обратно на сеанс задней камеры (я переключаюсь назад, как в точке 1.):
3D-объекты, добавленные в сцену AR, замирают в режиме c, и мировая дорожка останавливается за работой. И нет никакого способа вернуть его к работе, кроме закрытия приложения и повторного открытия.
Забавные вещи:
- Когда я отключаю
configuration.isWorldTrackingEnabled = true
часть Ошибка не появляется. Но мне нужно, чтобы был установлен configuration.isWorldTrackingEnabled = true
. - Сеанс фронтальной камеры никогда не прерывается, даже после появления ошибки, если я переключаюсь обратно на фронтальную камеру, отслеживание мира там работает хорошо.
Вот видео (без ошибок) приложения с configuration.isWorldTrackingEnabled =
false
:
Видео без ошибок - https://www.youtube.com/watch?v=JPAa6zJe_kQ
А вот видео (появляется ошибка) приложения с configuration.isWorldTrackingEnabled =
true
:
Да, видео об ошибке - https://www.youtube.com/watch?v=UF2Z8c4A42I
Что я уже пробовал?
- Сначала я попытался запустить приложение на фронтальной камере , чтобы посмотреть, не сломается ли при переходе на заднюю камеру. И да, он тоже ломается.
- Я попытался запустить
ARFaceTrackingConfiguration()
с configuration.isWorldTrackingEnabled = true
, а затем снова запустить его с configuration.isWorldTrackingEnabled = false
, чтобы посмотреть, переопределит ли это что-нибудь и исправит ли это. Но без блокировки, все еще ломается. - Я также пытался приостановить сеанс и затем снова включить его между переключателями камеры, но все еще глючил. Даже с задержками.
- Я также пытался запустить конфигурацию с настройками, такими как:
sceneView.session.run(configuration,options: [.resetTracking,.removeExistingAnchors,.stopTrackedRaycasts])
, но все же не повезло.
У всех есть идеи, как это исправить ? Кто-нибудь сталкивался с таким странным поведением?