我正在使用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)
}
答案 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)
}