前回は Unity の見下ろし型ゲームの作成支援アセット「TopDown Engine」の銃のサンプル KoalaRifle プレハブを参考にして、飛び出す薬きょうのゲームオブジェクトを自作の消しゴム銃にコピーし、その薬きょうの画像を差し替える手順を紹介しました。
前回の記事:TopDownEngine 射撃時に飛び出る薬きょう画像の変更 | Compota-Soft-Press

今回は、Unity ParticleSystem の Renderer モジュールで設定された薬きょうの画像マテリアル(Shader : Sprite/Default)が、ある程度ランダムに放物線を描いて落下する設定について紹介します。
※ Unity のバージョン 2021.3.25f1、 TopDown Engine のバージョンは 3.2 です。
※サンプルは、見下ろし型ゲームの作成支援アセット「TopDown Engine」のサンプル KoalaDungeon を用いています。
薬きょうの動きの設定項目の特定方法
Particle System コンポーネントはさらにモジュール単位に分けるほどプロパティの数が多く、すべてを一度に理解するのは筆者には難しいです。
そこで、既定値との差分だけをピックアップして、特に
- 薬きょうを放出させて
- 放物線上に落下させて
- 一定時間消える
設定について、値を変更して確認します。
具体的には KoalaRifle プレハブからコピーした Shells ゲームオブジェクトの Particle System コンポーネントの値と、
その Shells ゲームオブジェクトと同列に Create Empty で作成した空のゲームオブジェクトに Particle System コンポーネントを追加した既定値のコンポーネントの値を比較します。

以前に薬きょう画像のマテリアルを設定する場所を調べた際に紹介した Renderer モジュールの
Render Mode プロパティを Billboard から Vertical Billboard に
Material プロパティを None (Material) から自作の薬きょう画像のマテリアル(Sprites/Default)
に変更しました。
これは、デフォルトでマテリアルの画像がどのように発生・動作するかを調べるためと、サンプルの設定内容に変更していく際にどのように変化するかを確認するためです。

Renderer の前述のプロパティだけを変化させて動作させると、薬きょうというよりは湧き上がる蒸気のような動きが確認できました。
Particle System コンポーネントの既定値との比較
Particle Sysmte コンポーネントのメインモジュールからモジュール単位で、既定値と Shells のプロパティの差分を確認します。
メインモジュール
メインモジュールの公式の説明です。
Particle System モジュールにはシステム全体に影響するグローバルプロパティがあります。このプロパティのほとんどは、新たにつくられたパーティクルの初期の状態を制御します。
Particle System メインモジュール – Unity マニュアル

Duration | 5 → 20 | システムが実行する時間の長さ |
Looping | ON → OFF | 有効にすると、システムが継続時間の終了時に再び開始し、そのサイクルを継続的に繰り返します。 |
Start Lifetime | 5 → 20 | パーティクルの最初の生存期間 |
Start Speed | 5 → 5 ~ 7 | 任意の方向への各パーティクルの初速 |
Start Rotaion | 0 → -20 ~ 20 | 各パーティクルの最初の回転角度 |
Gravity Modifier | 0 → 1 | Physics ウィンドウで設定する重力値をスケールします。値を 0 にすると重力が無効になります。 |
Simulation Space | Local → World | パーティクルを親オブジェクトのローカル空間でアニメーションするか(親オブジェクトと一緒に動きます)、ワールド空間でアニメーションするか、または、カスタムのオブジェクトに関連させるか (選択したカスタムのオブジェクトと一緒に動きます) を制御します。 |
Culing Mode | Automatic → Always Simulate | パーティクルがオフスクリーンのときにパーティクルシステムのシミュレーションを一時停止するかどうかを選択します。オフスクリーンがもっとも効率的な場合にカリングを行いますが、オフスクリーンでのワンショットエフェクトのために、シミュレーションを継続した方が良い場合があります。 |
薬きょうを落下させるアニメーション時間を Duration で 5 から 20 にのばし、ループをしないように変更しています。
パーティクルの最初の生存期間をアニメーション時間の Duration と同じ 20 に変更して、パーティクルの初速は 5 ~ 7 ( Unit per Sec) の範囲内でランダムな値を設定しています。
プロパティの右側の ▼ボタンを押すと、設定方法が選択できるプロパティがあります。
Random Between Two Constants を選ぶと、フィールドが 2 つになり、そこで指定した 2 つの値の間のランダムな値が設定されるように指定できます。

初速と同様に回転角度も -20 ~ 20 度の範囲でランダムに指定しています。
重力を通常の強さで有効にして落下するようにしています。
薬きょうがキャラの動きに合わせてついてくるのは不自然なので、パーティクル(薬きょう画像のマテリアル)が影響を受ける空間は、キャラ(ローカル)ではなくワールドに変更されています。
非表示中もアニメーションをするように指定を変更し、非表示の部分が表示されたときにタイミングのずれを感じないようにしています。
これらのメインモジュールの設定を、 Shells の値に変更した結果です。

変更前の既定値では、ふわふわと上に漂うパーティクルでしたが、 Gravity Modifier で重力の影響を 0 から 1 に変えたことで薬きょうが落下する放物線を描くようになりました。
Start Speed, Start Rotateion の範囲指定で、個々のパーティクルが指定された範囲内で速度や角度にばらつきが与えられるようになりました。
今回はここまで
今回は、Unity の見下ろし型作成支援アセット「TopDown Engine」のサンプルの銃 KoalaRifle プレハブで射撃時に薬きょうを飛び出させて落下させるアニメーションを行っている Shells ゲームオブジェクトの Particle Systems のメインモジュールの値を既定値と比較しました。
重力の影響や、速度や角度を指定範囲内でランダムにすることで少しばらつきがある放物線上の落下アニメーションができるようになりました。
参照サイト Thank You!
- Unity のリアルタイム開発プラットフォーム | 3D/2D、VR/AR のエンジン
- TopDown Engine | システム | Unity Asset Store
- Particle System メインモジュール – Unity マニュアル
記事一覧 → Compota-Soft-Press
コメント