1

当我ARSession使用属性运行时ARWorldTrackingSessionConfigurationsceneView.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 错误,因为我的代码直接取自文档。有任何想法吗?

4

1 回答 1

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 秒,所以用户不会看到这个延迟。

于 2017-07-12T14:52:58.227 回答