【问题标题】:SceneKit: Create SCNNodes from models at runtimeSceneKit:在运行时从模型创建 SCNNode
【发布时间】:2018-11-14 06:14:11
【问题描述】:

我正在制作一个 SceneKit 游戏,并且我有一个包含我的模型的文件夹(file.obj、file.mtl、file.png)。我可以将模型拖到 game.scn 文件中。

let node = rootNode.childNode(withName: "boxTarget", recursively: true)!.flattenedClone()
node.isHidden = false

然后我查找节点的名称并创建一个 flattenedClone。

但我认为会有更好的方法在运行时使用模型动态创建多个 SCNNode,而无需将它们添加到 game.scn 文件中。

【问题讨论】:

    标签: ios swift scenekit


    【解决方案1】:

    如果我正确理解了这个问题,我做了这样的事情:

    func initGameNodes() {
            scene = SCNScene()
    
            gameNodes = SCNNode()
            gameNodes.name = "gameNodes"
            scene.rootNode.addChildNode(gameNodes)
    
            initLights()
            scene.rootNode.addChildNode(camera.cameraEye)
            scene.rootNode.addChildNode(camera.cameraFocus)
    
            camera.reset()
    }
    
    func loadCollada(sceneName: String, objName: String) -> SCNNode {
            let vScene = SCNScene(named: sceneName)!
            let gObject = vScene.rootNode.childNode(withName: objName, recursively: true)!
            return gObject
    }
    
    func createProjectileNodes(vMissile: weaponTypes) -> SCNNode {
                switch vMissile
                {
                case .defenseMissile:
                    let vNode = loadCollada(sceneName: "art.scnassets/Models/missile.dae", objName: "Default")
                    vNode.scale = SCNVector3Make(0.05, 0.05, 0.05)
                    vNode.name = "Missile01"
                    return vNode
                case . etc.
                }
    }
    

    【讨论】:

    • 我认为这种方法的问题在于您访问文件,这需要时间,因此帧速率会下降。我想要做的是加载一个类的更多节点,例如,没有时间惩罚。也许我必须回收节点,或者在场景加载时创建许多节点。
    猜你喜欢
    • 2017-04-15
    • 2019-07-21
    • 2018-03-28
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 2017-01-18
    • 2022-01-26
    相关资源
    最近更新 更多