ゲームエンジンⅡ⑥(2025/11/06)

ParticleSystem(GraphicEffect)

Particle(粒子)を表示させるEffect->ParticleEffect。
Hierarchy上で右クリック⇒Effects⇒ParticleSystem。

・基本設定
・モジュール(チェックボックスで有効にできて、折りたたまれている)

[Mainモジュールの基本設定項目]
Unity6のParticle Systemでは、「火」「煙」「魔法」などの視覚効果を作るために、粒子(パーティクル)を細かく設定できます。基本設定は「Mainモジュール」で行います。

以下に、初心者にもわかりやすく主要な設定項目を紹介します:

🌟 Mainモジュールの基本設定項目]

項目名説明
Durationパーティクルが1サイクルで動作する時間(秒)。例:5にすると5秒で1ループ。
Loopingループ再生するかどうか。ONにすると繰り返し再生されます。
Prewarmループ開始時にすでに再生されていたかのように表示(煙などに便利)。
Start Delay再生開始までの遅延時間。
Start Lifetime各パーティクルが生きている時間(秒)。短いとすぐ消える。
※Particle自体の生存時間で、Objectの生存時間ではない。Object自体をDestroyしなければ、表示上は何もなくてもObjectは残り続ける。
Start Speedパーティクルが飛び出す速さ。速いと勢いよく飛ぶ。
Start Sizeパーティクルの大きさ。数値が大きいと見た目も大きくなる。
Start Rotationパーティクルの初期回転角度。
Start Colorパーティクルの初期色。火ならオレンジ、煙ならグレーなど。
Gravity Modifier重力の影響度。1にするとUnityの重力がそのまま適用される。
Max Particles同時に存在できる最大パーティクル数。多すぎると重くなる。

🎛️ その他の便利なモジュール(必要に応じてON)

  • Emission:1秒あたりに出すパーティクル数を設定
  • Shape:どの形からパーティクルを出すか(球、円、円錐など)
  • Color over Lifetime:時間経過で色を変える
  • Size over Lifetime:時間経過でサイズを変える
  • Velocity over Lifetime:時間経過で速度や方向を変える

🧪 使い方のコツ

  • 最初は「Main」「Emission」「Shape」だけで十分!
  • 「再生ボタン」で見た目を確認しながら調整しよう
  • 「Start Lifetime × Emission Rate」で全体の粒子量が決まる

もっと詳しく知りたいときは、Unity公式マニュアルや、STYLYの入門記事がとても参考になります。

佳之さんのように構造から理解したい方には、パーティクルの「時間」「空間」「色」「速度」の変化を、信号処理や物理モデルとして捉えると、さらに深く楽しめると思います。もし「煙のような自然な動き」や「魔法陣のような周期的な表現」を作りたい場合は、次のステップとして「Noise」「Trails」「Sub Emitters」なども紹介できますよ!興味ありますか?

ParticleSystemコンポーネントがアタッチされたObjectを作成すると、シミュレーターがScene上に出現する。

[Emmision]

Rate over time : Particle放出数(/秒)

Bursts:1回のトリガーでいくつ(同時に)放出するか

この例ではトリガーによって30個(Countの値)を放出する。

ほかにもモジュールに様々な機能がある。

作成したParticleSystem(を含むオブジェクト)は、Prefab化すればInstantiateでいつでも使える。

ダメージエフェクトの生成を実装。
(Bullet.cs)

using UnityEngine;

public class Bullet : BaseBullet
{
    public GameObject damageParticle;
    void Update()
    {
        if (Mathf.Abs(transform.position.y) > 10f) // 画面外に出たら
        {
            Destroy(gameObject);
        }
    }
    private void OnTriggerEnter2D(Collider2D collision)
    {
        var enemy = collision.GetComponent<BaseEnemy>();
        if (collision.tag.Contains("Enemy"))
        {
            enemy.OnDamage(20);             //enemyにダメージ
            Destroy(gameObject);            //弾丸を消す

            //ダメージエフェクトを生成
            Instantiate(damageParticle, transform.position, Quaternion.identity);
        }
    }

}

Bullet.Prefabにアタッチ。

そのままだと、Scene上にParticleSystemのオブジェクトが残り続ける。
Instantiateの後始末をソースに組み込む。

using UnityEngine;

public class Bullet : BaseBullet
{
    public GameObject damageParticle;
    void Update()
    {
        if (Mathf.Abs(transform.position.y) > 10f) // 画面外に出たら
        {
            Destroy(gameObject);
        }
    }
    private void OnTriggerEnter2D(Collider2D collision)
    {
        var enemy = collision.GetComponent<BaseEnemy>();
        if (collision.tag.Contains("Enemy"))
        {
            enemy.OnDamage(20);             //enemyにダメージ
            Destroy(gameObject);            //弾丸を消す

            //ダメージエフェクトを生成
            GameObject effect = Instantiate(damageParticle, transform.position, Quaternion.identity);
            Destroy(effect, 3.0f);          //エフェクトを3秒後に消す
        }
    }

}

さらに、親オブジェクトに複数のParticleSystemを持たせて、Effectを重ねることができる。

コメント

タイトルとURLをコピーしました