我有一个主场景文件:main.scn
,以及其他几个包含额外SCN节点的场景文件:scene1.scn
、scene2.scn
、scene3.scn
等。在应用程序启动时,我从scene1.scn
中加载所需节点,并将它们添加到main.scn
中(显示在屏幕上)。在运行时,我需要从其他sceneN.scn
文件中添加附加节点。我尝试过两种方法,但都没有使用:
1)在renderer(_,updateAtTime)
内部,我只需加载所需节点:
func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
let scene2 = SCNScene(named: "game.scnassets/scene2.scn")!
let node = scene2.rootNode.childNode(withName: "nodeName", recursively: false)!
mainScene.rootNode.addChildNode(node)
}
在这种情况下,我会得到错误信息: [SceneKit] Error: Scene is modified within a rendering callback of another scene (). This is not allowed and may lead to crash 2) 在后台加载场景2和节点,将其添加到一些
nodesToShow
数组中,并在 renderer(_, updateAtTime)
中显示数组中的节点。在这种情况下,有时会出现以下错误:
com.apple.scenekit.scnview-renderer (17): EXC_BAD_ACCESS (code=1, address=0xf000000010a10c10)
也许您知道一些真正的解决方案来在运行时加载和展示其他场景文件中的节点?
renderer(_, updateAtTime)
中执行代码,会出现错误:[SceneKit] Error: Scene is modified within a rendering callback of another scene (). This is not allowed and may lead to crash。 - Sergey Didanov.load()
,屏幕上没有节点也没有错误。 - Sergey Didanov.load()
命令放在一个SCNTransaction
块中,错误就会消失。 - MasDennis