我正在开发一个 AR 绘图应用程序,我在 AR Kit 3 中遇到了一个错误/问题。世界跟踪停止工作,并且在 AR 视图中添加的 3D 对象被冻结。
我的应用程序在前后摄像头之间切换,在这两种情况下,我都启用了 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点一样切换回来):
添加到 AR 场景中的 3D 对象在静态视图中冻结,并且世界轨迹停止工作。没有办法让它恢复工作,只能关闭应用程序并重新打开。
有趣的事情:
- 当我禁用该
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()
withconfiguration.isWorldTrackingEnabled = true
然后再次重新运行它,configuration.isWorldTrackingEnabled = false
看看它是否会覆盖任何东西并修复它。但是没有锁,还是坏了。 - 我也尝试过暂停会话,然后在相机切换之间重新启用它,但仍然存在问题。即使有延误。
- 我还尝试使用以下设置运行配置:
sceneView.session.run(configuration,options: [.resetTracking,.removeExistingAnchors,.stopTrackedRaycasts])
,但仍然没有运气。
任何人都知道如何解决它?有人遇到过这种奇怪的行为吗?