从场景加载节点后,应用程序冻结

时间:2019-02-18 09:56:25

标签: ios swift scenekit augmented-reality arkit

我正在使用ARKit创建一个应用程序,并且运行良好。我唯一遇到的问题是,如果要显示某个节点,该应用程序将冻结大约一秒钟。 我无法解决这个问题。 在相同的对象上尝试了相同的代码,只是纹理更少,并且没有冻结。

场景为4.2mb,但有很多纹理。 在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 :(得分:0)

您可以尝试 GCD

只需使用

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

答案 1 :(得分:0)

尝试使用prepare(_:completionHandler:)添加节点。

  

默认情况下,SceneKit将资源懒惰地加载到GPU上以用于   渲染。这种方法有效地利用了内存和GPU带宽,   但是当您   向动画场景添加大量新内容。为了避免这种情况   问题,请在添加之前使用此方法准备要绘制的内容   它到现场。 SceneKit使用辅助线程来准备内容   异步。

所以您的代码将如下所示:

self.sceneView.prepare(nodeToDisplay) { (success) in
    self.sceneView.scene.rootNode.addChildNode(nodeToDisplay)
}