0
私は、daeファイルからSCNNodeのサブクラスである変数にオブジェクトをロードしたいと思います。ファイルにはモデルとアニメーションが含まれています。モデルをSCNNodeとしてロードする関数がありますが、SCNNodeサブクラスを使用するようにモデルを変更する方法はわかりません。SCNNodeのサブクラスとしてSceneKitをロードする
extension SCNNode {
class func loadModel(named fileName: String) -> SCNNode? {
let modelFileURL = Bundle.main.url(forResource: fileName, withExtension: "dae")!
let sceneSource = SCNSceneSource(url: modelFileURL, options: [SCNSceneSource.LoadingOption.animationImportPolicy : SCNSceneSource.AnimationImportPolicy.playRepeatedly])
return sceneSource?.entryWithIdentifier("MDL_Obj", withClass: SCNNode.self)
}
}
あなたがSCNNodeをサブクラス化したいのはなぜ?これはほとんど常に悪い考えです。 –
テクスチャのあるdaeアニメーションをロードした後、このノードを削除すると、テクスチャの割り当てが解除されず、メモリリークが発生するという奇妙なエラーが発生しました。私はそれについてのフォーラムで同様のスレッドを発見した、それは、SceneKitエラーと思われる。彼らが提案することは、ノードを削除するときにすべての最初のマテリアルプロパティをnilに設定することです。私の場合は、後で再利用するためにこのノードをいくつかの場所に保持しているので、ノードを削除するときにこれを行うことはできません。私はSCNNodeサブクラスの初めにこれらの変数をゼロにすることを再設定することを考えていました。このラッパークラスを使用していても作業しました。 –