子类化SCNScene和SceneKit编辑器

时间:2015-11-23 22:11:32

标签: ios scenekit

我有一个带摄像头设置的SCNScene子类,我想在所有子类中使用。

let scene01 = TheSubclassScene()
let scene02 = TheSubclassScene(named:"art.scnassets/testScene.scn")!
self.sceneArray.addObject(scene01)
self.sceneArray.addObject(scene02)

我想在运行时更改场景。当我在代码中创建场景但不使用SceneKit编辑器中的场景时,这个工作正常。所以scene01正在运作,但scene02不是。在调试器中,我可以看到数组中的两个场景。一个是SCNSceneSubclass类型,但另一个是SCNScene类型。

有没有办法让这个工作?

更新: 这是我的场景子类

class TheSubclassScene: SCNScene
{
    let cameraNode = CameraNode()

    override init()
    {
        super.init()
        self.rootNode.addChildNode(self.cameraNode)
    }

    required init?(coder aDecoder: NSCoder)
    {
        super.init(coder: aDecoder)
    }
}

1 个答案:

答案 0 :(得分:1)

.scn个文件仅归档SCNScene个实例并使用NSKeyedArchiver写入磁盘。 + sceneNamed:所做的是它只是使用NSKeyedUnarchiver取消归档场景。

您可以做的是尝试使用- setClass:forClassName:来实例化子类而不是SCNScene

话虽如此,SCNScene并不是真正意义上的子类。相反,您可以在视图控制器或游戏控制器(可能是NSObject的直接子类)中实现您的逻辑。该控制器也可能符合SCNSceneRendererDelegate以实现您的游戏逻辑。