【Unity】パーティクルシステムとは?ゲームのエフェクトを作れる機能

Particle Systemとは? Unity

こんにちは、ともくんのゲーム作り部屋にようこそ!

このページでは、

「Unityのパーティクルシステムってなに?」

「パーティクルシステムはどんなことができるの?」

というお悩みの方に向けた内容となっています。

Unityには、パーティクルシステム(Particle System)と呼ばれるコンポーネントがあります。

このパーティクルシステムは、ゲーム内のエフェクトを作成できる機能となっていて、パーティクル(粒子)を使って動きのあるエフェクトを作ることができます。

例えば、パーティクルシステムを使うことで、、またゲーム内で動きのある際の演出など様々なものを作ることができます。

そこで、このページでは、Unityのパーティクルシステムがどういうものなのか、基本的な使い方や作り方までをまとめていきます。

この記事を書いた人

ゲーム作りを学び始めた一児のパパです。
このブログは、子供から「ゲームを作ってみたい!」と言われ、非プログラマーでゲーム作りをしたことない僕が、ゲーム作りの本を読んで独学でゲーム開発を学んでいるブログです。
同じように初めてゲーム作りをしている方と一緒に学んでいけるようなブログに出来たらいいなと思っています。
また、「このコードはおかしい」とか「もっと良い書き方があるよ!」などあれば、どんどん指摘して頂けると助かります。

パーティクルシステム(Particle System)とは?

まずは、パーティクルシステムについて、機能や仕組みを紹介していきます。

エフェクト効果を作れるコンポーネント

パーティクルシステム(Particle System)とは、ゲーム内のエフェクト効果を作ることができるコンポーネントです。

もう少し詳しく言うと、パーティクルという粒子を発生させて、その粒子の数や大きさ、色、時間などを細かく変化させることで、エフェクトを作ることができるシステムです。

例えば、車が衝突した際に爆発させるエフェクトだったり、敵を剣などで切ったときのエフェクトだったり、様々なエフェクトをパーティクルシステムで作ることができます。

他のコライダーとの当たり判定も付けられる

パーティクルシステムで発生される粒子には、当たり判定を付けることができます。

具体的には、パーティクルシステムの設定の中に「Collision」という項目があり、これを使うことで、他のColliderコンポーネントが付いているオブジェクトに対して、当たり判定の処理を作れるようになります。

パーティクルシステムは、基本的にエフェクトを作るために使うことが多いですが、この当たり判定を使えば、パーティクルシステムを使って相手への攻撃を作ることもできるようになります。

なお、パーティクルシステムの当たり判定の付け方については、別の記事で紹介していく予定です。

パーティクルシステム(Particle System)の基本的な使い方・作り方

ここからは、パーティクルシステムを使って簡単なエフェクトを作っていきます。

パーティクルシステムを作成する

まずは、パーティクルシステムを作成していきます。

パーティクルシステムは、新たにオブジェクトを作成して使うか、すでにあるオブジェクトに対してコンポーネントを付けるか、という2つの方法があります。

新しくパーティクルシステムのオブジェクトを作成する

新しいパーティクルシステムのオブジェクトを作成する場合は、ヒエラルキーウィンドウ+ボタンから「Effects」の中にある「Particle System」を選択します。

すると、新しいオブジェクトが作成されて、パーティクルがシーン内に表示されます。

すでにあるオブジェクトにパーティクルシステムを付ける

すでにあるオブジェクトに対してパーティクルシステムのコンポーネントを付ける場合は、インスペクターウィンドウから「Add Component」をクリックして、

「Effects」の中にある「Particle System」を選択すると、パーティクルシステムを紐づけることができます。

パーティクルシステムで簡単なエフェクトの作り方

それではパーティクルシステムを使って、以下の噴水から水が出ているような簡単なエフェクトを作っていきます。

なお、パーティクルシステムは設定パラメーターがたくさんあり複雑なので、それぞれのパラメーターについては、また別の記事でまとめて紹介していく予定です。

パーティクルにマテリアル(Material)の設定を行う

まず、それぞれのパーティクルの形や材質などを決めているマテリアル(Material)の設定を行います。

マテリアルの設定は、パーティクルシステムの一番下にある「Renderer」の中の「Material」の項目で、パーティクルの形を決めていきます。

ここでは、Unityにビルトインされている「Default-ParticleSystem」というマテリアルにしてみました。

パーティクルを放出する形状を決める

次に、パーティクルが出てくる際に、どのようなで放出するかを「Shape」の項目で決めていきます。

例えば、この形状が「Sphere」の場合、パーティクルが一か所から360度それぞれの方向に向かい放出され、

「Box」の場合は、パーティクルが四角の形状に沿って放出されます。

噴水のエフェクトの場合、パーティクルの出てくる方向は一緒で、少しずつ横に拡がりながら表示させたいので、Shapeを「Cone」に設定して、拡がりを決める「Angle」の値を「10」に設定してみました。

また、パーティクルの放出形状に合わせて、オブジェクトを回転して上向きに放出されるようにしておきます。

パーティクルの放出条件を変更していく

あとは、パーティクルの放出条件などを変更していきます。

ここでは、今回の噴水エフェクトを作った際にデフォルト値から変更した以下の7つの項目について、上から順にそれぞれ説明していきます。

  • Start Lifetime:パーティクルが消えるまでの時間を設定
  • Start Speed:パーティクルが放出される速度を設定
  • Start Size:パーティクルが放出されるサイズを設定
  • Start Color:パーティクルの放出される際のを設定
  • Gravity Modifier:パーティクルにかかる重力を設定
  • Max Particles最大のパーティクルの数を設定
  • Rate over Time1秒あたりにおけるパーティクルの放出数
Start Lifetime:パーティクルが消えるまでの時間を設定

Start Lifetimeは、パーティクルが放出されてから消えるまでの時間を決めている項目です。

例えば、このStart Lifetimeが「5」の場合は、それぞれのパーティクルが表示されてから5秒後に消えることになります。

今回は、Start Lifetimeを「1.6」、つまりパーティクルが表示されて1.6秒後に消える設定にしたので、パーティクルの表示が短くなっています。

Start Speed:パーティクルが放出される速度を設定

Start Speedは、パーティクルが放出された際の速度を決めている値です。

このStart Speedの値が高ければ高いほどパーティクルの放出速度は早く、低ければ低いほど遅くなります。

今回は、Start Speedの値を「30」と引き上げたので、勢いよくパーティクルが放出されるようになりました。

Start Size:パーティクルが放出されるサイズを設定

Start Sizeは、パーティクルが放出された際の大きさを決めている項目です。

この値が高ければ高いほど、一つ一つのパーティクルの大きさが大きくなります。

今回は、Start Sizeの値を「0.5」としたので、小さく表示されるようになりました。

Start Color:パーティクルの放出される際の色を設定

Start Colorは、パーティクルの放出された際の色を指定している項目で、カラーピッカーから選択することができます。

今回は、噴水のエフェクトなので、このStart Colorを水色っぽい色に設定しています。

Gravity Modifier:パーティクルにかかる重力を設定

Gravity Modifierは、パーティクルに重力をかけることができる項目です。

このGravity Modifierを設定することで、パーティクルは重力を受けてへの力が働くことになります。

今回は、上に放出された水(パーティクル)を重力で落としたいので、Gravity Modifierを「4」に設定しています。

Max Particles:最大のパーティクルの数を設定

Max Particlesは、放出されているパーティクルの最大数を設定する項目です。

例えば、Max Particlesが「1,000」であれば、パーティクルが1,000個放出されたら放出をストップして、パーティクルが消えたらその分の放出を再開することになります。

今回は、パーティクルが多いほうがより噴水っぽくなるので、Max Particlesを「4,000」と増やしています。

Rate over Time:1秒あたりにおけるパーティクルの放出数

Rate over Timeは、Emissionの中にある項目で、1秒あたりのパーティクルの放出数を決めている値です。

例えば、Rate over Timeの値が「10」であれば、1秒間に10個のパーティクルが放出されることになります。

今回は、このRate over Timeの値を「2,000」と大きく引き上げています。

上のように、噴水のようなエフェクトを作ることができました。

スクリプトからパーティクルシステムを再生する

ここまでの設定で、噴水のエフェクトを作ることができましたが、常に表示されている状態なので、このエフェクトをスクリプトから再生停止を行えるようにしていきましょう。

パーティクルシステムのオブジェクトに対して、以下のスクリプトをアタッチしておきます。

using UnityEngine;

public class FountainEffect : MonoBehaviour
{
    ParticleSystem ps;

    void Start()
    {
        ps = GetComponent<ParticleSystem>();    // ParticleSystemコンポーネントを取得
    }

    void Update()
    {
        // スペースキーを押した場合の処理
        if (Input.GetKeyDown(KeyCode.Space))
        {
            if (ps.isPlaying == false)  // 停止中の場合
            {
                ps.Play();  // 再生する
            }
            else // 再生中の場合
            {
                ps.Stop();  // 停止する
            }
        }
    }
}

パーティクルシステムの再生や停止は、Particle Systemコンポーネントの中にあるPlayメソッドとStopメソッドで行うことができます。

そこで、9行目でParticle Systemコンポーネントを取得した後に、スペースキーを押したら再生と停止を繰り返せるように14行目以降で処理を書いています。

パーティクルシステムが再生中かどうかは、isPlayingの変数で取得することができるので、変数の値がfalseで停止されている場合はPlayメソッドで再生させて、それ以外の場合はStopメソッドで停止する処理を作っています。

実際にゲームを実行してみると、

スペースキーを押したら停止して、もう一度押すと再生することができています。

なお、パーティクルシステムの設定の「Play On Awake」にチェックが入っていると、ゲーム起動時にエフェクトが再生されることになるので、最初は表示させたくない場合、この「Play On Awake」のチェックを外しておきましょう。

まとめ

このページでは、Unityのパーティクルシステム(Particle System)について、どんな機能なのか、また使い方や作り方までをまとめていきましたが、いかがでしたでしょうか?

パーティクルシステム(Particle System)とは、ゲーム内で演出に使うエフェクトを作ることができる機能です。

このパーティクルシステムは、パーティクル(粒子)を表示させて、形や速度、色などを変化させていくことで、エフェクトを作ることができます。

また、コライダー機能も搭載しているので、パーティクルを使った当たり判定を行うこともできます。

最後までお読みいただきまして、ありがとうございました!

コメント