SceneKit エディターの使い方をちょっとしたトリックを作ったので、使ってみますが、これがどのようにパフォーマンスを低下させるのかわかりません。シーン エディターを使用して複雑な SKNodes 構造を作成し、それらを現在のシーンにロードしたいと考えています。ノードのサブクラス化にも役立ちます。
シーン エディターでノードを構成し、親ノードを "base" という空のノードとして設定し、SKNode のサブクラスを作成しました。次に、init メソッドを作成し、シーンで必要なときに呼び出します。
// subclass code
class MyOwnSKNodeSubclass: SKNode {
let nodeLayer = SKNode()
init(fromNode: SKNode){
super.init()
nodeLayer.addChild(fromNode.childNodeWithName("base").copy() as SKNode)
addChild(nodeLayer)
}
}
// scene code
if let myNode = SKNode.unarchiveNodeFromFile("MyScene")
{
// you can use your subclass here
let node = MyOwnSKNodeSubclass(fromNode: myNode)
addChild(node)
}
大きな違いはありませんが、独自の SKNode 拡張機能も使用しました。
class func unarchiveNodeFromFile(file:String) -> SKNode?{
if let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") {
var nodeData = NSData.dataWithContentsOfFile(path, options: .DataReadingMappedIfSafe, error: nil)
var archiver = NSKeyedUnarchiver(forReadingWithData: nodeData)
archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKNode")
let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as SKNode
archiver.finishDecoding()
return scene
} else {
return nil
}
}
私が言ったように、生産性についてはよくわかりませんが、これを頻繁に使用しなければ、それほど害はないと思います。これが誰かに役立つことを願っています。