我有一个带摄像头设置的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)
}
}
答案 0 :(得分:1)
.scn
个文件仅归档SCNScene
个实例并使用NSKeyedArchiver
写入磁盘。 + sceneNamed:
所做的是它只是使用NSKeyedUnarchiver
取消归档场景。
您可以做的是尝试使用- setClass:forClassName:
来实例化子类而不是SCNScene
。
话虽如此,SCNScene
并不是真正意义上的子类。相反,您可以在视图控制器或游戏控制器(可能是NSObject
的直接子类)中实现您的逻辑。该控制器也可能符合SCNSceneRendererDelegate
以实现您的游戏逻辑。