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を重ねることができる。

コメント