当我使用 ARWorldTrackingSessionConfiguration
运行我的 ARSession
时,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
但它给了我 nil,所以我假设以上是问题所在。
我在 iPad Pro 2017 上运行它,它确实支持 ARWorldTrackingSessionConfiguration
,而且我也尝试过只使用 ARSessionConfiguration
,但这给了我同样的结果。
有没有人遇到过这种情况?它现在看起来有点像 ARKit 错误,因为我的代码是直接从文档中获取的。有什么想法吗?
最佳答案
我遇到了同样的问题。看起来 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 秒后, session 开始正确确定当前帧。但是在第一次使用框架之前你应该等待这么短的时间。我用“打开相机”的动画隐藏了这 0.5 秒,所以用户不会看到这个延迟。
关于ios - ARSession 运行但没有配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44943699/