Приложение зависает после загрузки узла из сцены - PullRequest
0 голосов
/ 18 февраля 2019

Я создаю приложение с помощью ARKit, и оно отлично работает.Единственная проблема, с которой я столкнулся, это то, что если я хочу отобразить определенный узел, приложение зависает примерно на секунду.Я не могу придумать решение проблемы.Пробовал один и тот же код с тем же объектом, только с меньшим количеством текстур, и он не зависПротестировано на iOS 12.1.0 iPhone Xs Max.

   guard let scene = SCNScene(named: "myScene.scn") else { return }

    if let nodeToDisplay = scene.rootNode.childNode(withName: "nameOfNode", recursively: true) {

            self.sceneView.scene.rootNode.addChildNode(nodeToDisplay)
    }

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Попробуйте использовать prepare (_: завершениеHandler:) , чтобы добавить свой узел.

По умолчанию SceneKit лениво загружает ресурсы в графический процессор для рендеринга.Этот подход эффективно использует память и пропускную способность графического процессора, но может привести к заиканиям в противном случае сглаженной частотой кадров при добавлении большого количества нового контента в анимированную сцену.Чтобы избежать таких проблем, используйте этот метод для подготовки контента для рисования, прежде чем добавлять его на сцену.SceneKit использует вторичный поток для асинхронной подготовки контента.

Таким образом, ваш код будет выглядеть примерно так:

self.sceneView.prepare(nodeToDisplay) { (success) in
    self.sceneView.scene.rootNode.addChildNode(nodeToDisplay)
}
0 голосов
/ 18 февраля 2019

Вы можете попробовать GCD для этого,

Просто используйте это

DispatchQueue.main.async {
self.sceneView.scene.rootNode.addChildNode(nodeToDisplay)
}
...