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



我正在创建一个带有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)
    }

尝试使用准备(_:pleastionhandler :)添加节点。

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

,您的代码将是这样的:

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

您可以尝试 gcd 为此

只需使用此

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

最新更新