SpriteKitのパーティクル関連のメモ
SpriteKitのパーティクルの実装については日本語の良記事がたくさんある。特にSpriteKit Particle System File(拡張子.sks)を作る際に最初はテンプレートを選ばないといけなくて、選択時にはプレビューできないので、各テンプレートを一覧で解説してくれている以下の記事は参考になった。
sksファイルを読み込んでSKEmitterNodeを初期化する
sksファイルからSKEmitterNodeを初期化するには、こうする。
let filePath = Bundle.main.path(forResource: "MyParticle", ofType: "sks")!
let emitterNode = NSKeyedUnarchiver.unarchiveObject(withFile: filePath) as! SKEmitterNode
なんか2019年の流儀とは思えないが、なぜかSKEmitterNodeにはsksファイルを直接渡せるイニシャライザが用意されていない。(なぜ?)
ちなみにiOS 12ではNSKeyedUnarchiverのところで以下のワーニングが出る。
'unarchiveObject(withFile:)' was deprecated in iOS 12.0: Use +unarchivedObjectOfClass:fromData:error: instead
このメッセージのオススメメソッドを使うとさらにワーニングがでる(試してみてください)ので、iOS 12では次のようにunarchiveTopLevelObjectWithDataを使う。
let filePath = Bundle.main.path(forResource: "MyParticle", ofType: "sks")!
let data = try! Data(contentsOf: URL(fileURLWithPath: filePath))
let emitterNode = try! NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data) as! SKEmitterNode
SKEmitterNodeのparticleRenderOrder
SKEmitterNodeのほとんどのパラメータはParticle Editorで更新してその場でプレビューできるが、レンダリングの順序を変えるパラメータであるparticleRenderOrder(方はSKParticleRenderOrder)に関してはエディタ上で変えられない。
[Blend Mode]の設定で"Alpha"を選択し、[Alpha]の[Start]値を1.0にするとパーティクルが透過「せず」オブジェクトの色が混ざることもなくなるので、レンダリング順(どっちが前にあるか)が非常に重要になってくる。
パーティクル放出のインターバルを調整する
最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/