【Unity入門】パーティクルシステムの基本を理解しよう!爆発・火花・煙を作る手順とC#での制御方法

広告

ゲームで敵を倒したときの爆発、キャラクターが着地したときの砂ぼこり、魔法を使ったときのキラキラした光。こうした「小さな粒がたくさん出て、動いて、消える」表現は、パーティクルシステムという仕組みで作られています。

プログラムで一つ一つ粒を動かそうとすると大変ですが、Unityにはパーティクルシステムが標準で用意されています。数値を調整するだけで、見た目の派手なエフェクトを作れます。

この記事では、次のことを順番に解説します。

  • パーティクルシステムとは何か
  • 主要なモジュール(設定項目のまとまり)の役割
  • 実際にヒットエフェクトを作る手順
  • C#スクリプトから再生・停止する方法
  • 初心者がつまずきやすいポイント

動作確認はUnity 6を前提としています。

パーティクルシステムとは

パーティクル(Particle)は「粒子」という意味です。パーティクルシステムは、画像やメッシュで作った小さな粒を大量に発生させ、動かし、一定時間後に消すための仕組みです。

Unityのパーティクルシステムの流れ(発生・広がる・色と大きさが変化・消える)を説明した図

イメージしやすいように、花火にたとえてみましょう。

花火 パーティクルシステム
打ち上げ筒 エミッター(粒を出す場所)
火の粒 パーティクル
火の粒が広がる方向 Shapeモジュール
火の粒が消えるまでの時間 Start Lifetime
火の粒の色が変わっていくこと Color over Lifetime

つまり、「どこから」「どれだけ」「どんな向きで」「どんな見た目の粒を」出すかを設定していくのがパーティクルシステムの作業です。

パーティクルシステムの作り方

Hierarchyウィンドウで右クリックし、Effects > Particle System を選ぶと作成できます。作成した直後は、シーンビューに白い粒が上向きに出続ける状態になっているはずです。

Inspectorを見ると、モジュールと呼ばれる項目が縦に並んでいます。モジュールはチェックボックスでオン・オフでき、必要な機能だけを有効にして使います。

最初に覚える主要モジュール

Unityのパーティクルシステムには多くのモジュールがありますが、最初からすべてを覚える必要はありません。まずは次の5つを押さえましょう。

1. メインモジュール(Particle System)

粒の「初期状態」を決める、いちばん大事なモジュールです。

項目 役割
Duration エフェクト全体の再生時間
Looping 繰り返し再生するか
Start Lifetime 粒が生きている時間(秒)
Start Speed 発生時の速さ
Start Size 発生時の大きさ
Start Color 発生時の色
Gravity Modifier 重力の影響の強さ(0で無重力)
Simulation Space 粒をローカル座標で動かすか、ワールド座標で動かすか
Play On Awake シーン開始時に自動で再生するか
Stop Action 再生が終わったときの動作(Destroyにすると自動削除)

初心者が最初にいじるのは、Start Lifetime、Start Speed、Start Sizeの3つです。Constant(固定値)だけでなくRandom Between Two Constants(2つの値の間でランダム)も選べるので、粒にばらつきを出したいときに便利です。

2. Emissionモジュール

粒をいつ・どれだけ出すかを決めます。

  • Rate over Time:1秒あたりに出す粒の数。煙や炎のように出し続けるエフェクト向きです。
  • Bursts:指定したタイミングで一気に粒を出します。爆発やヒットエフェクト向きです。

3. Shapeモジュール

粒をどんな形の範囲から、どの向きに出すかを決めます。Sphere(球)、Cone(円錐)、Box(箱)、Circle(円)などから選べます。

  • 爆発:Sphere(全方向に広がる)
  • 噴水やスポットライト:Cone(一方向に広がる)
  • 雨や雪:Box(広い範囲から降らせる)

4. Color over Lifetime / Size over Lifetime

粒が生まれてから消えるまでの間に、色や大きさを変化させます。

  • Color over Lifetime:グラデーションの末尾でアルファ(透明度)を0にすると、粒がふわっと消えます。
  • Size over Lifetime:カーブで大きさを変えます。だんだん小さくすると、火花が消えていく表現になります。

粒が突然ぷつっと消えると不自然に見えるので、この2つを設定するだけで見栄えがかなり良くなります。

5. Rendererモジュール

粒をどう描画するかを決めます。

  • Render Mode:通常は Billboard(常にカメラのほうを向く板)です。
  • Material:粒に貼る見た目です。プロジェクトで使っているレンダーパイプライン(Built-in、URPなど)に合ったシェーダーを使ったマテリアルを指定します。

ポイント:粒がピンク色に表示されるときは、マテリアルのシェーダーがレンダーパイプラインに対応していない可能性があります。マテリアルのシェーダーを見直してみてください。

実践:ヒットエフェクトを作ってみよう

ここまでの内容を使って、物がぶつかったときに出る「火花のようなヒットエフェクト」を作ります。

手順1:Particle Systemを作成する

Hierarchyで Effects > Particle System を作成し、名前を HitEffect に変更します。

手順2:メインモジュールを設定する

項目 設定値の例
Duration 0.5
Looping オフ
Start Lifetime 0.4〜0.8(Random Between Two Constants)
Start Speed 3〜6(Random Between Two Constants)
Start Size 0.1〜0.3(Random Between Two Constants)
Start Color 黄色〜オレンジ
Gravity Modifier 1
Stop Action Destroy

手順3:Emissionを設定する

  1. Rate over Time を 0 にします。
  2. Bursts の「+」ボタンで1行追加し、Time = 0、Count = 30 にします。

これで、再生した瞬間に30個の粒が一気に飛び出します。

手順4:Shapeを設定する

Shape を Sphere にして、全方向に粒が広がるようにします。

手順5:色と大きさの変化を付ける

  1. Color over Lifetime をオンにし、グラデーションの右端のアルファを0にします。
  2. Size over Lifetime をオンにし、カーブを右下がりにします。

手順6:プレハブにする

完成した HitEffect をProjectウィンドウにドラッグ&ドロップして、プレハブにします。Hierarchyにあるオブジェクトは削除して構いません。

C#からパーティクルを再生する

プレハブができたら、ぶつかった位置にエフェクトを出すスクリプトを書きます。

using UnityEngine;

public class HitEffectSpawner : MonoBehaviour
{
    [SerializeField] private ParticleSystem hitEffectPrefab;

    private void OnCollisionEnter(Collision collision)
    {
        // 最初の接触点を取得
        ContactPoint contact = collision.GetContact(0);

        // 接触した位置にエフェクトを生成
        ParticleSystem effect = Instantiate(hitEffectPrefab, contact.point, Quaternion.identity);
        effect.Play();
    }
}

このスクリプトをボールなどのオブジェクト(Rigidbody と Collider が付いたもの)に追加し、Inspectorの Hit Effect Prefab に先ほどのプレハブを設定します。何かにぶつかるたびに火花が散るようになります。

「的に当たったら粒が飛び散る」という演出は、ゲームの中でもよく使います。実際のゲームでの使い方は、Unity 6でIgaguriを作る② ― クリックした方向へ飛ばして、パーティクルで演出する で確認できます。

解説

  • OnCollisionEnter は、他のColliderとぶつかった瞬間に呼ばれるメソッドです。Colliderの基本は 【学習】当たり判定(Collider)(Collider2D、Rigidbody2D) で解説しています。
  • collision.GetContact(0) で、ぶつかった場所の情報を取り出しています。
  • Instantiate でプレハブをその場所に生成し、Play() で再生しています。プレハブと生成の基本は 【学習】プレハブと生成(Prefab、Instantiate、Destroy) を参照してください。
  • メインモジュールの Stop Action を Destroy にしてあるので、再生が終わると自動的にオブジェクトが削除されます。これを忘れると、エフェクトのオブジェクトがシーンに残り続けてしまいます。

再生・停止を制御するメソッド

シーンに置いたパーティクルを操作したい場合は、ParticleSystem の次のメソッドを使います。

using UnityEngine;

public class ParticleController : MonoBehaviour
{
    [SerializeField] private ParticleSystem smoke;

    public void StartSmoke()
    {
        smoke.Play();   // 再生を開始
    }

    public void StopSmoke()
    {
        // 新しい粒の発生だけを止める(出ている粒は消えるまで残す)
        smoke.Stop(true, ParticleSystemStopBehavior.StopEmitting);
    }
}

Stop の第2引数で、止め方を選べます。

指定 動き
StopEmitting 新しい粒の発生だけ止める。すでにある粒は寿命まで残る
StopEmittingAndClear 発生を止め、出ている粒もすぐに消す

煙や炎を自然に消したいときは StopEmitting が向いています。

初心者がつまずきやすいポイント

1. 粒が見えない・ピンク色になる
マテリアルのシェーダーが、使っているレンダーパイプラインに合っていない可能性があります。Rendererモジュールの Material を確認しましょう。

2. エフェクトがシーンに残り続ける
Instantiate で生成したエフェクトは、自分で消さない限り残ります。メインモジュールの Stop Action を Destroy にするのが最も簡単な対策です。

3. 移動するオブジェクトに付けたら粒の軌跡がおかしい
Simulation Space の設定が原因のことがあります。粒が親オブジェクトに付いて動いてほしいときは Local、置き去りにして軌跡を残したいときは World を選びます。

4. 粒を出しすぎて重くなる
Burst の Count や Rate over Time を増やしすぎると、描画の負荷が上がります。Max Particles で上限を決めておくと安心です。特にスマホ向けのゲームでは、必要最小限の数に抑えましょう。

パーティクルシステムとVFX Graphの違い

Unity 6には、もう一つのエフェクト機能として VFX Graph があります。

Particle System VFX Graph
設定方法 Inspectorでモジュールを調整 ノードをつないで作る
処理 主にCPU 主にGPU
向いている用途 一般的なエフェクト全般、入門 数十万単位の大量の粒、高度な表現

最初に学ぶのは Particle System がおすすめです。操作が分かりやすく、考え方(発生・移動・変化・消滅)はVFX Graphでも共通しているため、そのまま次のステップに活かせます。

まとめ

  • パーティクルシステムは、小さな粒を大量に出して動かす仕組み。
  • 「どこから・どれだけ・どんな向きで・どんな見た目で」を設定していく。
  • 最初に覚えるのは、メイン、Emission、Shape、Color/Size over Lifetime、Renderer の5つ。
  • 爆発やヒットエフェクトは Burst で作り、Stop Action を Destroy にしておくと扱いやすい。
  • C#では Play() と Stop() で再生を制御できる。

パーティクルは、数値を少し変えるだけで見た目が大きく変わります。まずは作ったヒットエフェクトの Start Speed や Gravity Modifier を変えて、どう変わるかを試してみてください。「触って確かめる」ことが、いちばんの近道です。

次に読むとおすすめの記事

参考

訪問数 10 回, 今日の訪問数 10回

広告

Particle,Unity

Posted by hidepon