Subclassing SCNScene and SceneKit Editor

前端 未结 3 1197
无人共我
无人共我 2021-01-28 02:18

I have SCNScene subclass with a camera setup, that I want to use in all the subclasses.

let scene01 = TheSubclassScene()
let scene02 = TheSubclassScene(named:\"a         


        
相关标签:
3条回答
  • 2021-01-28 02:41

    I have a workaround for that problem. Not nice but it works. I instantiate a SCNScene(named: "art.scnassets/testScene.scn") then I instantiate a TheSubclassScene() and I clone the rootNode of the scene and add it as a child node to the subclass scene.

    let testScene = SCNScene(named:"art.scnassets/testScene.scn")!
    let subclassScene = TheSubclassScene()
    subclassScene.rootNode.addChildNode(testScene.rootNode.clone())
    
    0 讨论(0)
  • 2021-01-28 02:43

    Note: don't give your custom subclass a name starting with "SCN"; that prefix is for Apple.

    The only difference I can see is calling SCNSceneSubclass(named:) vs SCNSceneSubclass(). Without seeing your code, my hunch is that your implementation of SCNSceneSubclass(named:) does not call through to your subclass's initialization, and thus misses some key steps.

    Can we see a bit of your subclass's source code?

    0 讨论(0)
  • 2021-01-28 02:50

    .scn files are just SCNScene instances archived and written to disk using NSKeyedArchiver. What + sceneNamed: does is that it simply unarchives the scene with a NSKeyedUnarchiver.

    What you could do then, is to try to use - setClass:forClassName: to instantiate a subclass instead of a SCNScene.

    That being said, SCNScene is not really meant to be subclassed. Instead you could implement your logic in the view controller or a game controller (possibly a direct subclass of NSObject). This controller will also likely conform to SCNSceneRendererDelegate to implement your game logic.

    0 讨论(0)
提交回复
热议问题