パーティクルシステムを使うと、たくさんの粒子が飛び散るような表現ができます。
以前の記事で打ち上げ花火をつくる方法を紹介しましたが、今回は手持ち花火をつくってみましょう。

サンプル配布
手持ち花火のサンプルを配布します。
今回紹介する内容のほかに、パーティクルの色が変化したり、火を付けたり消したりといったことができるようになっています。サンプルの構成を見ながら記事を読んでみてください!
まずはシンプルに噴き出す花火をつくる
まずはシンプルに火花が噴き出す花火をつくります。
- Hierarchyを右クリックか、上部メニューのGameObjectから新しいオブジェクトを作成します。名前をHandyFireWorksとしましょう。

- HandyFireWorksを右クリックして、子オブジェクトとしてEffects>Particle Systemを作成します。このParticle Systemを調整して花火らしくしていきます。


次にパーティクルの大きさを小さくしましょう。
- Particle SystemのInspectorを開き、Start Sizeという項目を変更します。
- デフォルトは1となっていますが、これを0.05くらいにしてください。


次に花火が一点から吹き出すようにします。
- Shapeモジュールを開き、Radiusの項目に0を入力して最小値に変更しましょう(0にはなりません)。

これで一点から円錐形にパーティクルが出るようになります。

火花の飛ぶ距離も手持ち花火には長すぎるので調整しましょう。
- 速度(Start Speed)とパーティクルが消えるまでの時間(Start Lifetime)で調整ができます。
- 今回は速度はそのままに、Start Lifetimeを0.2にします。


さらに花火らしく見せるために、Trailsを設定しましょう。
- Trailsモジュールにチェックを入れます。パーティクルの軌跡が現れるようになりますが、Trails用のマテリアルを設定していないとマテリアルエラーのマゼンタ色になってしまいます。
- Rendererモジュールを開き、Trail MaterialにDefault-ParticleSystemというマテリアルを選択してください。


花火を動かしたときに、すでに飛んでいる火花が一緒に動いてしまわないようにしておきましょう。
- Simulation Spaceという項目をLocalからWorldに変更します。

最後に色を変更しましょう。
- Start Colorという項目のカラーバーからパレットを開き、好きな色を選択してください。

これでベースとなる吹き出す花火のパーティクルができあがりました!

弾ける花火を追加する
これだけでも十分花火らしいですが、余力のある人は線香花火のようにパチパチと弾けさせてみましょう。
パーティクルからさらにパーティクルを発生させるSub Emittersというモジュールを使います。
- まずはParticle Systemの子にもうひとつ新しいParticle Systemオブジェクトを作成します。

下記は間違った例です。必ずParticle Systemの子にしましょう。

子のParticle Systemには次のように設定しましょう(デフォルトから変更する部分だけ抜粋しています)。
- Start Lifetime = 0.2
- Start Speed = 1
- Start Size = 0.02
- Start Color 好きな色
- Emission
- Rate over Time = 0
- Bursts +ボタンを押してひとつ追加
- Time = 0
- Count = 5
- Shape
- Shape = Sphere
- Radius = 0.0001(最小値)
- Trailsにチェック
- Renderer
- Trail Material = Default-ParticleSystem


続いて親のParticle SystemのInspectorを開いて、Sub Emittersの設定をしていきます。
- まずSub Emittersモジュールにチェックを入れてください。


- 「Birth」と書かれている部分をクリックして、「Death」に変更します。これでパーティクルが消えるときに子のパーティクルを発生させるようになります。
- その隣の「None」には子のParticle Systemを設定しましょう。

これで、吹き出した火花が弾けるようになりました。

花火を持てるようにする
このままだとワールドに固定されているだけなので、手で持てるアイテムにしていきます。
- まずはHandyFireWorksオブジェクトにGrabbable Itemコンポーネントを追加します。


このままだと花火は重力に従って落下します。
好みによりますが、重力を反映させたくない場合は自動で追加されたRigidbodyコンポーネントのIs Kinematicにチェックを入れましょう。

続いてHandyFireWorksの子に手で持つ部分のモデルを追加します。
モデルがなければプリミティブオブジェクトのCubeやCylinderのScaleを調整したものでもいいでしょう。

- Grabbable Itemにはコライダーが必要なので追加します。HandyFireWorksにBoxColliderコンポーネントを追加してください。
- Box ColliderのCenterとSizeの値を変更するか、編集ボタンを押して調整しましょう。持ち手の部分より一回り大きいくらいが使いやすいと思います。


- 手で持つ位置も設定します。HandyFireWorksの子に新しいGameObjectを作成し、名前をGripとします。
- Gripの位置と向きを手で持つ場所に合わせてください。
- ハンドルの表示モードをLocalにしたときに、青い矢印の向いている方向が前方(腕の延長線の向き)になります。


- 位置と向きを合わせたら、HandyFireWorksのGrabbableItemのGripの欄にオブジェクトのGripを設定してください。これでGripの位置で持てるようになります。

最後にParticle Systemの位置を持ち手の先端に移動しましょう。吹き出す向きが合っていないときは回転させて合わせてください。

ここまでできたら実行してみましょう。手で持てる花火ができているはずです。

手に持って使うと花火に火が付くようにする
このままだとずっと火が付いたままになってしまいます。
好きなタイミングで火を付けられるようにしてみましょう。
- まずParticle SystemにSet Game Object Active Gimmickを追加します。
- TargetをItemにして、HandyFireWorksを設定します。
- Keyは「fireActive」としてください。


- 始めはパーティクルが出ていない状態になるよう、Particle Systemを非アクティブにします。
- 次に、HandyFireWorksにUse Item Triggerを追加します。
- +ボタンでDown Triggersをひとつ追加して、TargetはThis、Keyは先ほどと同じfireActiveにします。
- Valueの項目でBoolを選択し、チェックボックスにチェックを入れてください。


これで実行してみましょう。花火を手で持ってクリックで使うと火が付きます。
花火の色や飛び方を変えると、さまざまな花火をつくることができます。
パーティクルシステムは設定項目が多いですが、その分多彩な表現が可能です。
まずは今回紹介したパラメーターから自分で色々と変えて試してみましょう!
