敵を倒しても、ただ消えるだけ。魔法を撃っても、地味な玉が飛ぶだけ——そんな画面に「爆発の飛沫」「立ち昇る煙」「きらめく魔法の粒」を足すと、同じゲームが一気に生き生きします。この 粒の演出 を担うのがパーティクルです。
Godotには CPUParticles2D と GPUParticles2D があり、大量の粒を軽く描くなら GPUParticles2D が主 役です。この記事では、その基本構造と ParticleProcessMaterial の勘どころを押さえ、定番の 爆発・煙・魔法 を作れるようにします。
この記事でわかること
GPUParticles2Dの3要素(Amount / ParticleProcessMaterial / Texture)ParticleProcessMaterialで作る、1粒の 一生(Lifetime・初速・重力・Color Ramp・Scale Curve)One Shotと Explosiveness で「一瞬で弾ける」爆発を作る- 爆発・煙・魔法の 設定レシピ と、プーリングでの使い回し
GPUParticles2Dの3要素
GPUParticles2D は、粒の計算を GPUの並列処理 に任せます。だから数千〜数万の粒でも、ゲームのロジックが動くCPUにほとんど負荷をかけずに描けます。逆に、GDScriptで1粒ずつ細かく操作したい・数が少ないなら CPUParticles2D の方が向きます。
| 特徴 | GPUParticles2D | CPUParticles2D |
|---|---|---|
| 処理場所 | GPU | CPU |
| 得意なこと | 数千〜数万の粒(爆発・炎・雨・吹雪) | 数十個・1粒ずつコードで制御(足元の砂埃など) |
GPUParticles2D を動かすには、最低でも次の3つを設定します。

- Amount :一度に出せる粒の最大数。多いほど見応えは増えますが、その分重くなります。
- Process Material :
New ParticleProcessMaterialで作る、動き・色・サイズなど 振る舞い を決める心臓部。 - Texture :粒1つの見た目。中心が明るく外へ透明になる白黒 グラデが万能です(
Colorで色を掛ければ使い回せます)。
ParticleProcessMaterialで「粒の一生」を作る
ParticleProcessMaterial は、粒の「発生 → 移動 → 消滅」という一生を作るための設定集です。1粒がどう生まれ、どう動き、どう消えるかを決めます。

とくによく使うのはこのあたりです。
- 時間 :
Lifetime(消えるまでの秒数)、One Shot(1回だけ放出)、Preprocess(開始時に事前計算しておく) - 形と方向 :
Emission Shape(Point / Sphere / Ring など発生源の形)、Direction+Spread(飛ぶ向きと広がり角) - 動き :
Initial Velocity(初速。Min/Maxでばらつき)、Gravity(煙は負の値で上昇)、Damping(抵抗で減速) - 見た目の変化 :
Scale Curve(寿命に沿ったサイズ)、Color Ramp(寿命に沿った色)
見た目のリアリティを大きく左右するのが Color Ramp です。ここで 寿命の終わりにアルファ(透明度)を0にし忘れる と、消える瞬間に黒い粒がパッと残ってしまいます。最後は必ず透明に落とす——これが滑らかに消す コツです。
One ShotとExplosivenessで弾けさせる
爆発のように「一瞬でドンと出す」には、One Shot と Explosiveness の組み合わせが鍵になります。

- One Shot :
Amountの数だけ放出して止まります(連続放出でなく単発)。 - Explosiveness :
0ならLifetimeをかけて 少しずつ 放出(噴水・炎向き)、1なら 全部を0フレームで一気に 放出(爆発向き)。
爆発は One Shot: on + Explosiveness: 1.0 が基本形です。この2つで「パッと弾けて、すっと消える」タイミングが作れます。
実践:爆発・煙・魔法の3レシピ
3要素と「粒の一生」が分かれば、あとは値の組み合わせで多彩なエフェクトが作れます。アクションでもSTGでもRPGでも使い回せる、定番の3つを見てみましょう。

爆発:一瞬で弾ける
- 時間 :
Lifetime: 0.8/One Shot: on/Explosiveness: 1.0 - 方向 :
Spread: 180(全方位へ) - 動き :
Initial Velocity: 200〜300/Gravity: (0, 0) - 見た目 :
Scale Curveは最初大きく→0へ。Color Rampは 白 → 黄 → オレンジ → 透明
爆発は使い捨てなので、放出が終わったら自分を消します。One Shot のときだけ出る finished シグナルを使うのがきれいです。
extends GPUParticles2D
func _ready() -> void:
finished.connect(queue_free) # 放出し終わったら自分を消す(One Shot時のみ発火)
func explode(pos: Vector2) -> void:
global_position = pos
restart() # 最初から放出し直す
煙:ゆっくり昇る
- 時間 :
Lifetime: 3.5/One Shot: off(出し続ける) - 動き :
Gravity: (0, -30)(上昇)/Damping: 5 - ゆらぎ :
Turbulenceをオンにして、風に揺れる感じを出す - 見た目 :
Scale Curveはゆっくり拡大。Color Rampは 白 → 灰・半透明 → 透明
煙は連続放出なので finished は出ません。止めるときは emitting = false にします。
魔法弾:軌道を描く
- 時間 :
Lifetime: 1.5/One Shot: on - 形 :
Emission Shape: Ring(リング状に発生) - 動き :
Initial Velocity: 50〜80 - 見た目 :
Color Rampは 水色 → 青 → 紫・透明。Hue Variationで色相に少し幅を出す
魔法弾のように 頻繁に出す エフェクトを、毎回 instantiate() / queue_free() していると生成コストがかさみます。作ったインスタンスを使い回す オブジェクトプーリング を使うと、ぐっと軽くなります。
よくある間違いとベストプラクティス

| よくある間違い | ベストプラクティス |
|---|---|
Amount を必要以上に大きくする | 最小限の Amount にして、粒の Scale や動きで密度感を出す |
Visibility Rect を設定しない | 描画範囲を Visibility Rect で指定し、画面外の描画を抑える |
Color Ramp のアルファを0にし忘れ、黒い粒が残る | 寿命の終わりで必ずアルファを0にして滑らかに消す |
頻出エフェクトを毎回 instantiate / queue_free する | オブジェクトプーリング でインスタンスを使い回す |
| 半透明の粒を重ねすぎてオーバードローで重くなる | 粒のサイズや数を抑え、テクスチャアトラスでドローコールも削減する |
おまけ:先に知っておくと良いこと
- 色は Texture × Color で使い回す :白黒グラデのテクスチャを1枚用意し、
Colorで色を掛ければ、炎も魔法も同じ画像から作れます。 - 光ると映える :爆発や魔法に 2Dライティング の光を重ねると、粒がぼうっと発光して迫力が増します。
- 凝った動きはシェーダーで :うねる炎や歪みなど、標準設定で足りない動きは Fragment Shaderの基礎 の領域です。
- アトラスでまとめる :複数のエフェクト画像を1枚のテクスチャアトラスにすると、マテリアルを共有できてドローコールが減ります。
まとめ
- 3要素 :
Amount(数)・ParticleProcessMaterial(振る舞い)・Texture(粒 の見た目) - 粒の一生 :
Lifetime・Initial Velocity・Gravityで動きを、Color Ramp・Scale Curveで見た目の変化を作る - 弾けさせる :
One Shot+Explosiveness: 1.0で一瞬の爆発 - 使い回す :頻出エフェクトはプーリングで軽く、
Visibility Rectで描画を抑える
まずは白黒グラデのテクスチャで爆発を1つ作り、Color Ramp と Explosiveness をいじってみましょう。値を変えるだけで、炎にも噴水にも魔法にも化けます。そこに光や影を重ねれば、画面の説得力が一段と上がります。