パーティクルで演出しよう:Particle Systemの基本【Unityスタートガイド12-4】

コインを取ったらキラキラ、敵を倒したらドカン、焚き火からはモクモク。小さな粒をたくさん飛ばして表現するのがパーティクルです!今回はUnityのParticle Systemの基本と、スクリプトから一瞬だけ出す方法をご紹介します。

目次

この記事で学べること

  • Particle Systemの作り方と、シーンビューでの確認方法
  • よく使うモジュール(Main・Emission・Shape・Color over Lifetimeなど)の設定
  • URPでのパーティクルのマテリアル
  • プレハブにして、スクリプトから好きな場所に出す方法

前提知識

Particle Systemを作ってみよう

  • Hierarchyで右クリック>Effects>Particle Systemを選択
  • 白い粒が上に向かってふわふわ出てくれば成功!

オブジェクトを選んでいる間は、シーンビューの右下にParticle Effectという小さなウィンドウが出て、再生・一時停止・最初からやり直し(Restart)が出来ます。

よく使うモジュール

InspectorのParticle Systemは、「モジュール」ごとに設定が分かれています。名前の左のチェックでOn/Off、名前をクリックで開閉します。

Main(一番上の設定)

項目内容
Duration1回の再生の長さ(秒)
Loopingくり返すかどうか
Start Lifetime1つの粒が消えるまでの時間(秒)
Start Speed粒が飛び出す速さ
Start Size粒の大きさ
Start Color粒の色
Gravity Modifier重力のかかり具合(1で普通に落ちる)
Simulation SpaceLocal:オブジェクトと一緒に動く/World:出た後は置いていかれる
Play On Awake有効になったときに自動で再生
Stop Action再生が終わったときにどうするか(Destroyで自動で消える)

Simulation Spaceの使い分け

  • 車の排気ガスや足元の土ぼこりのように「出た粒はその場に残ってほしい」→ World
  • オーラのように「キャラクターにくっついて動いてほしい」→ Local

Emission(どれだけ出すか)

  • Rate over Time:1秒あたりに出す数(ずっと出し続けるとき)
  • Bursts:決まったタイミングで一気に出す(爆発やキラキラ)
    • 「+」で追加して、Time:0、Count:30のように設定

Shape(どこから・どの向きに出すか)

  • Shape:Cone(円すい)、Sphere(全方向)、Circle、Boxなど
  • Radius:出てくる範囲の大きさ

Color over Lifetime / Size over Lifetime

  • Color over Lifetime:時間とともに色を変える。最後を透明(Alphaを0)にすると、ふわっと消える
  • Size over Lifetime:時間とともに大きさを変える。だんだん小さくして消すのが定番です

Renderer(見た目)

  • Material:粒に使うマテリアル
  • Render Mode:Billboard(いつもカメラの方を向く板)が基本

URPでのマテリアル

URPのプロジェクトで作ったParticle Systemには、最初からParticlesUnlitのようなURP用のマテリアルが設定されています。自分で作るときは、次のようにします。

  • Projectウィンドウで右クリック>Create>Material
  • Shader:Universal Render Pipeline/Particles/Unlit
  • Surface Type:Transparent(半透明)
  • Base Mapに、粒の形の画像(ふちがぼやけた丸など)を設定
  • Particle SystemのRendererのMaterialに、このマテリアルをセット

パーティクルがピンク色になった場合は、シェーダーがURP用になっていません(3-3の記事で説明したものと同じ原因です)。

スライム

設定項目が多すぎて、どこを触ればいいか分からない・・・

フェアリー

まずはStart Lifetime・Start Speed・Start Size・Start Colorの4つだけで十分!Restartを押しながら、少しずつ数字を変えてみてね

コインを取ったらキラキラさせる

1回だけ出るパーティクルを作る

  1. Hierarchyで右クリック>Effects>Particle Systemを作り、名前をCoinSparkleにする
  2. Mainを下記のように設定
    • Duration:0.5
    • Looping:チェックを外す
    • Start Lifetime:0.5
    • Start Speed:3
    • Start Size:0.2
    • Start Color:黄色
    • Stop Action:Destroy
  3. Emission
    • Rate over Time:0
    • Burstsを「+」で追加して、Time:0、Count:20
  4. Shape:Sphere、Radius:0.2
  5. Size over Lifetimeにチェックを入れ、だんだん小さくなるカーブにする
  6. ProjectウィンドウのPrefabsフォルダにドラッグしてプレハブにし、Hierarchyのものは削除

Stop Action:Destroyにしておくと、再生が終わったときにオブジェクトが自動で消えるので、スクリプトで消す必要がありません。

スクリプトで出す

コインを取った場所に、プレハブを出します。

using UnityEngine;

public class PickupEffect : MonoBehaviour
{
    [SerializeField] private ParticleSystem sparklePrefab;

    void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Coin"))
        {
            // コインの位置に、キラキラを出す(回転はプレハブのまま)
            Instantiate(sparklePrefab, other.transform.position, sparklePrefab.transform.rotation);
        }
    }
}
  • PlayerにPickupEffectを付けて、InspectorのSparkle Prefabに、CoinSparkleのプレハブをドラッグ&ドロップします
  • プレハブのPlay On Awakeがチェックされているので、出した瞬間に再生されて、終わったら自動で消えます
  • 6-10のCoinCollector(コインを消す)と一緒に付けて使えます。2DゲームならOnTriggerEnter2D(Collider2D other)に書き換えます

再生と停止をスクリプトで切り替える

ずっと出し続けるパーティクル(ダッシュ中の土ぼこりなど)は、プレイヤーの子オブジェクトにしておき、必要なときだけ出します。

using UnityEngine;

public class DustControl : MonoBehaviour
{
    [SerializeField] private ParticleSystem dust;

    // 走っているときだけ土ぼこりを出す
    public void SetRunning(bool isRunning)
    {
        if (isRunning && !dust.isPlaying)
        {
            dust.Play();
        }
        else if (!isRunning && dust.isPlaying)
        {
            dust.Stop();
        }
    }
}
  • Play()で出し始め、Stop()で新しく出すのをやめる(出ている粒は寿命まで残る)
  • 土ぼこり側のLoopingはチェック、Play On Awakeはチェックを外しておきます

よくあるエラーと対処法

エラー:パーティクルがピンク色

  • 原因:マテリアルのシェーダーがURP用になっていない
  • 対処法:ShaderをUniversal Render Pipeline/Particles/Unlitにする

エラー:Instantiateしても何も出ない

  • 原因:プレハブのPlay On Awakeが外れている、Emissionの数が0、またはBurstsがない
  • 対処法:Play On Awakeにチェック。Rate over TimeかBurstsで粒が出る設定にする

エラー:パーティクルのオブジェクトがどんどん増えて消えない

  • 原因:Stop ActionがNoneのまま、またはLoopingにチェックが入っている
  • 対処法:1回だけのパーティクルは、Looping:チェックなし、Stop Action:Destroyにする

エラー:粒がプレイヤーにくっついてきてしまう

  • 原因:Simulation SpaceがLocal
  • 対処法:出た粒をその場に残したいときは、Simulation SpaceをWorldにする

まとめ

  • Particle Systemは、Hierarchyで右クリック>Effects>Particle Systemで作る
  • 基本はMain(寿命・速さ・大きさ・色)、Emission(数)、Shape(出る形)
  • URPでは、Universal Render Pipeline/Particlesのシェーダーを使う
  • 1回だけの演出は、Looping:オフ、Bursts、Stop Action:Destroyにしてプレハブ化
  • スクリプトからはInstantiateで出す、Play/Stopで切り替える

もっと凝った演出の例は、紙吹雪のエフェクトを作る【ParticleSystem-VFX-Confetti】で紹介しています。

次のステップ

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次