[英]Subclassing SCNScene and SceneKit Editor
我有一個帶有攝像機設置的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)
}
}
我有一個解決該問題的方法。 不好,但是可以。 我實例化一個SCNScene(named: "art.scnassets/testScene.scn")
然后實例化TheSubclassScene()
然后克隆場景的TheSubclassScene()
並將其作為子節點添加到子類場景。
let testScene = SCNScene(named:"art.scnassets/testScene.scn")!
let subclassScene = TheSubclassScene()
subclassScene.rootNode.addChildNode(testScene.rootNode.clone())
.scn
文件只是使用NSKeyedArchiver
存檔並寫入磁盤的SCNScene
實例。 + sceneNamed:
作用是使用NSKeyedUnarchiver
簡單地取消存檔場景。
然后,您可以嘗試使用- setClass:forClassName:
實例化一個子類而不是SCNScene
。
話雖如此, SCNScene
並不是真的要被子類化。 相反,您可以在視圖控制器或游戲控制器(可能是NSObject
的直接子類)中實現邏輯。 該控制器也可能會遵循SCNSceneRendererDelegate
來實現您的游戲邏輯。
注意:不要給您的自定義子類一個以“ SCN”開頭的名稱; 該前綴用於Apple。
我唯一看到的區別是調用SCNSceneSubclass(named:)
vs SCNSceneSubclass()
。 沒有看到您的代碼,我的直覺是您對SCNSceneSubclass(named:)
實現不會調用子類的初始化,因此會錯過一些關鍵步驟。
我們可以看到您的子類的源代碼嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.