当我使用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错误,因为我的代码是直接从文档中获取的。有什么想法吗?
答案 0 :(得分:0)
我有同样的问题。并且看起来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秒,因此用户不会看到这种延迟。