見出し画像

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にするとパーティクルが透過「せず」オブジェクトの色が混ざることもなくなるので、レンダリング順(どっちが前にあるか)が非常に重要になってくる。

パーティクル放出のインターバルを調整する

ここから先は

1,030字 / 2画像
文章やサンプルコードは多少荒削りかもしれませんが、ブログや書籍にはまだ書いていないことを日々大量に載せています。たったの400円で、すぐに購読解除してもその月は過去記事もさかのぼって読めるので、少しでも気になる内容がある方にはオトクかと思います。

技術的なメモやサンプルコード、思いついたアイデア、考えたこと、お金の話等々、頭をよぎった諸々を気軽に垂れ流しています。

最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/