ARKit занимает 30 секунд, чтобы начать отслеживать?

Хорошо, исследуем ARKit со Swift в iOS 11 здесь, и я сделал очень простое приложение, которое просто добавляет узлы в точке, где пользователь нажимает:

override func viewDidLoad() {
        super.viewDidLoad()

        // Set the view's delegate
        sceneView.delegate = self

        // Show statistics such as fps and timing information
        sceneView.showsStatistics = true

        // Create a new scene
        let actualScene = SCNScene(named: "art.scnassets/ship.scn")!

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        guard let touch = touches.first else { return }
        let results = sceneView.hitTest(touch.location(in: sceneView), types: [ARHitTestResult.ResultType.featurePoint])
        guard let hitFeature = results.last else { return }
        let hitTransform = SCNMatrix4.init(hitFeature.worldTransform) // <- if higher than beta 1, use just this -> hitFeature.worldTransform

        let hitPosition = SCNVector3Make(hitTransform.m41,
                                         hitTransform.m42,
                                         hitTransform.m43)

        createBall(hitPosition: hitPosition)
    }
func createBall(hitPosition : SCNVector3) {
        let newBall = SCNSphere(radius: 0.01)
        let newBallNode = SCNNode(geometry: newBall)
        newBallNode.position = hitPosition
        self.sceneView.scene.rootNode.addChildNode(newBallNode)
    }

И это работает. Моя проблема в том, что при первом запуске приложения требуется 30-60 секунд простого панорамирования камеры, когда нажатие ничего не дает.

Кажется, что ARKit "загружается", так что, когда я нажимаю в эту первую минуту, никакие узлы не появляются в повернутой позиции. Ничего не происходит в эту первую минуту.

Почему это? Есть ли способ ускорить этот процесс загрузки? Что здесь происходит?

1 ответ

В переопределенной функции viewWillAppear вызовите эту функцию

func setUpSceneView() {
        let configuration = ARWorldTrackingConfiguration()
        configuration.planeDetection = .horizontal

        sceneView.session.run(configuration)

        sceneView.delegate = self
    }

и удалить все в viewdidload и добавить то, что вам нужно, в представлении появится

Другие вопросы по тегам