GPUParticles2D/3D in Godot 4 — Complete Guide Godot 4のGPUParticles2D/3D 完全ガイド

1. Introduction1. はじめに

Godot 4 uses GPUParticles2D and GPUParticles3D as the default particle system nodes. These run entirely on the GPU, making them significantly faster than their CPU counterparts for large particle counts. The old ParticlesMaterial from Godot 3 has been replaced by ParticleProcessMaterial, which offers more control over particle behavior.

Godot 4ではGPUParticles2DGPUParticles3Dがデフォルトのパーティクルシステムノードです。GPU上で完全に実行されるため、大量のパーティクルでもCPU版より大幅に高速です。Godot 3のParticlesMaterialParticleProcessMaterialに置き換えられ、パーティクルの動作をより細かく制御できるようになりました。

CPUParticles2D and CPUParticles3D still exist as fallback nodes for devices that lack GPU compute support or when you need to access individual particle data from GDScript. For most use cases, GPU particles are the recommended choice.

CPUParticles2DCPUParticles3Dは、GPUコンピュートをサポートしないデバイス向け、またはGDScriptから個々のパーティクルデータにアクセスする必要がある場合のフォールバックとして引き続き利用可能です。ほとんどのケースではGPUパーティクルが推奨されます。

2. GPUParticles2D vs CPUParticles2D2. GPUParticles2D vs CPUParticles2D

Feature特徴 GPUParticles2D CPUParticles2D
Processing処理 GPU (compute shader)GPU(コンピュートシェーダー) CPU (main thread)CPU(メインスレッド)
Max particles最大パーティクル数 100,000+ efficiently100,000+でも高速 ~1,000-5,000 practical limit実用的には1,000-5,000が限界
Sub-emittersサブエミッター Yes対応 No非対応
Trailsトレイル Yes対応 No非対応
Per-particle access個別パーティクルアクセス No (GPU only)不可(GPU専用) Yes (from GDScript)可能(GDScriptから)
Compatibility mode互換モード Requires Vulkan/Metal/D3D12Vulkan/Metal/D3D12が必要 Works everywhereどこでも動作
Material typeマテリアル型 ParticleProcessMaterial Built-in properties (no material)組み込みプロパティ(マテリアル不要)
Tip: Use GPUParticles2D by default. Switch to CPUParticles2D only if you need Compatibility renderer support, need to read particle positions in GDScript, or target very old hardware. デフォルトではGPUParticles2Dを使いましょう。Compatibilityレンダラー対応、GDScriptでのパーティクル位置読み取り、または非常に古いハードウェアをターゲットにする場合のみCPUParticles2Dに切り替えてください。

3. Basic Setup3. 基本セットアップ

To create a basic particle effect, add a GPUParticles2D node to your scene and assign a ParticleProcessMaterial to it. Here is a minimal setup in GDScript:

基本的なパーティクルエフェクトを作成するには、シーンにGPUParticles2Dノードを追加し、ParticleProcessMaterialを割り当てます。GDScriptでの最小構成は以下の通りです:

# Create a GPUParticles2D node via code
var particles = GPUParticles2D.new()
particles.amount = 50
particles.lifetime = 2.0
particles.explosiveness = 0.0  # 0 = continuous, 1 = all at once
particles.randomness = 0.5

# Create and assign the material
var mat = ParticleProcessMaterial.new()
mat.direction = Vector3(0, -1, 0)  # Note: uses Vector3 even in 2D
mat.initial_velocity_min = 50.0
mat.initial_velocity_max = 100.0
mat.gravity = Vector3(0, 98, 0)

particles.process_material = mat
add_child(particles)

Key properties on the GPUParticles2D node itself:

GPUParticles2Dノードの主要プロパティ:

  • amountNumber of particles alive at any time (default: 8)同時に存在するパーティクル数(デフォルト: 8)
  • lifetimeHow long each particle lives in seconds (default: 1.0)各パーティクルの生存時間(秒)(デフォルト: 1.0)
  • one_shotEmit once then stop (default: false)一度だけ放出して停止(デフォルト: false)
  • explosiveness0.0 = continuous stream, 1.0 = all particles at once0.0 = 連続放出、1.0 = 全パーティクルを一度に放出
  • randomnessRandom offset to emission timing (0.0-1.0)放出タイミングのランダムオフセット(0.0-1.0)
  • speed_scaleMultiplier for simulation speedシミュレーション速度の倍率
  • emittingWhether the system is currently emitting現在放出中かどうか

4. ParticleProcessMaterial Deep Dive4. ParticleProcessMaterial 詳解

ParticleProcessMaterial controls how individual particles behave over their lifetime. All directional properties use Vector3, even for 2D particles (the Z component is simply ignored).

ParticleProcessMaterialは個々のパーティクルのライフタイム中の動作を制御します。2Dパーティクルでも方向プロパティはすべてVector3を使用します(Z成分は単に無視されます)。

Direction & Velocity方向と速度

var mat = ParticleProcessMaterial.new()

# Direction: normalized vector for initial particle heading
mat.direction = Vector3(0, -1, 0)  # Upward in 2D (Y is flipped)

# Spread: cone angle in degrees (0 = straight line, 180 = hemisphere)
mat.spread = 45.0

# Initial velocity: particles spawn with speed in this range
mat.initial_velocity_min = 100.0
mat.initial_velocity_max = 200.0

# Gravity: constant acceleration applied every frame
mat.gravity = Vector3(0, 98, 0)  # Pulls downward in 2D

Angular Velocity角速度

Spin particles as they move. Useful for debris, confetti, or leaves.

パーティクルを移動中に回転させます。破片、紙吹雪、落ち葉などに便利です。

mat.angular_velocity_min = -180.0  # degrees per second
mat.angular_velocity_max = 180.0

Scale Over Lifetimeライフタイム中のスケール変化

Use a CurveTexture to change particle size over their lifetime:

CurveTextureを使ってパーティクルサイズをライフタイム中に変化させます:

var curve = Curve.new()
curve.add_point(Vector2(0.0, 1.0))  # Full size at birth
curve.add_point(Vector2(0.5, 1.2))  # Slightly larger at midlife
curve.add_point(Vector2(1.0, 0.0))  # Shrink to nothing at death

var curve_tex = CurveTexture.new()
curve_tex.curve = curve
mat.scale_curve = curve_tex

Damping & Attractor減衰とアトラクター

Damping slows particles over time, simulating air resistance. Attractors (separate nodes) pull particles toward a point.

ダンピングはパーティクルを時間とともに減速させ、空気抵抗をシミュレートします。アトラクター(別ノード)はパーティクルをポイントに引き寄せます。

mat.damping_min = 5.0
mat.damping_max = 10.0

5. Color Gradients5. カラーグラデーション

The color_ramp property on ParticleProcessMaterial accepts a GradientTexture1D to smoothly change particle color over their lifetime. This is essential for realistic fire, smoke, and magic effects.

ParticleProcessMaterialcolor_rampプロパティはGradientTexture1Dを受け取り、パーティクルの色をライフタイム中に滑らかに変化させます。リアルな炎、煙、魔法エフェクトに不可欠です。

Fire Gradient Example炎のグラデーション例

var gradient = Gradient.new()
gradient.colors = PackedColorArray([
    Color(1.0, 1.0, 1.0, 1.0),    # White (hot core)
    Color(1.0, 1.0, 0.2, 1.0),    # Yellow
    Color(1.0, 0.5, 0.0, 1.0),    # Orange
    Color(0.8, 0.1, 0.0, 0.8),    # Red
    Color(0.2, 0.0, 0.0, 0.0),    # Dark red, transparent (fade out)
])
gradient.offsets = PackedFloat32Array([0.0, 0.15, 0.4, 0.7, 1.0])

var grad_tex = GradientTexture1D.new()
grad_tex.gradient = gradient
mat.color_ramp = grad_tex
Tip: Always end your gradient with alpha = 0 so particles fade out smoothly instead of popping out of existence. グラデーションの最後は必ずアルファ=0にして、パーティクルが突然消えるのではなく滑らかにフェードアウトするようにしましょう。

You can also set a flat color property instead of a gradient for uniform-colored particles:

均一な色のパーティクルにはグラデーションの代わりにフラットなcolorプロパティも設定できます:

mat.color = Color(0.2, 0.6, 1.0, 0.8)  # Semi-transparent blue

6. Emission Shapes6. エミッション形状

The emission shape determines where particles spawn. Set via emission_shape on ParticleProcessMaterial.

エミッション形状はパーティクルの出現位置を決定します。ParticleProcessMaterialemission_shapeで設定します。

Point

All particles spawn at the node's origin. Default shape.

全パーティクルがノードの原点から出現します。デフォルトの形状です。

mat.emission_shape = ParticleProcessMaterial.EMISSION_SHAPE_POINT

Sphere / Sphere Surface

Particles spawn randomly within a sphere (or only on its surface).

パーティクルが球体内(またはその表面上のみ)にランダムに出現します。

mat.emission_shape = ParticleProcessMaterial.EMISSION_SHAPE_SPHERE
mat.emission_sphere_radius = 50.0

# Surface only:
mat.emission_shape = ParticleProcessMaterial.EMISSION_SHAPE_SPHERE_SURFACE
mat.emission_sphere_radius = 50.0

Box

Particles spawn randomly within a rectangular volume.

パーティクルが矩形ボリューム内にランダムに出現します。

mat.emission_shape = ParticleProcessMaterial.EMISSION_SHAPE_BOX
mat.emission_box_extents = Vector3(100, 10, 0)  # Wide and thin

Ring

Particles spawn on a ring (donut) shape, defined by inner/outer radius and height.

パーティクルがリング(ドーナツ)形状に出現します。内径/外径/高さで定義されます。

mat.emission_shape = ParticleProcessMaterial.EMISSION_SHAPE_RING
mat.emission_ring_radius = 80.0       # Outer radius
mat.emission_ring_inner_radius = 60.0 # Inner radius (hole)
mat.emission_ring_height = 0.0        # Flat ring
mat.emission_ring_axis = Vector3(0, 0, 1)  # Ring normal
Tip: Combine EMISSION_SHAPE_BOX with a wide X extent and narrow Y to create ground-level effects like dust trails or footstep particles. EMISSION_SHAPE_BOXでXを広く、Yを狭くすると、砂ぼこりや足跡パーティクルのような地面レベルのエフェクトを作成できます。

7. Practical Recipes7. 実践レシピ

Fire

Orange-red gradient, upward velocity, slight spread, scale decreasing over lifetime.

オレンジ~赤のグラデーション、上方向の速度、わずかな広がり、ライフタイム中にスケール縮小。

func create_fire() -> GPUParticles2D:
    var p = GPUParticles2D.new()
    p.amount = 40
    p.lifetime = 0.8
    p.randomness = 0.3

    var mat = ParticleProcessMaterial.new()
    mat.direction = Vector3(0, -1, 0)
    mat.spread = 15.0
    mat.initial_velocity_min = 40.0
    mat.initial_velocity_max = 80.0
    mat.gravity = Vector3(0, -20, 0)  # Slight upward pull
    mat.damping_min = 5.0
    mat.damping_max = 10.0

    # Color ramp: white -> yellow -> orange -> red -> transparent
    var grad = Gradient.new()
    grad.colors = PackedColorArray([
        Color(1, 1, 1, 1), Color(1, 1, 0.2, 1),
        Color(1, 0.4, 0, 0.9), Color(0.6, 0.1, 0, 0.4),
        Color(0.2, 0, 0, 0)
    ])
    grad.offsets = PackedFloat32Array([0.0, 0.1, 0.35, 0.7, 1.0])
    var grad_tex = GradientTexture1D.new()
    grad_tex.gradient = grad
    mat.color_ramp = grad_tex

    # Scale: shrink over time
    var curve = Curve.new()
    curve.add_point(Vector2(0, 0.8))
    curve.add_point(Vector2(0.3, 1.0))
    curve.add_point(Vector2(1, 0.0))
    var curve_tex = CurveTexture.new()
    curve_tex.curve = curve
    mat.scale_curve = curve_tex

    p.process_material = mat
    return p

Smoke

Gray gradient, slow upward movement, large spread, low alpha for wispy look.

灰色のグラデーション、ゆっくりとした上昇、大きな広がり、低アルファで薄い見た目。

func create_smoke() -> GPUParticles2D:
    var p = GPUParticles2D.new()
    p.amount = 25
    p.lifetime = 3.0
    p.randomness = 0.5

    var mat = ParticleProcessMaterial.new()
    mat.direction = Vector3(0, -1, 0)
    mat.spread = 35.0
    mat.initial_velocity_min = 10.0
    mat.initial_velocity_max = 30.0
    mat.gravity = Vector3(0, -5, 0)
    mat.damping_min = 2.0
    mat.damping_max = 5.0
    mat.angular_velocity_min = -30.0
    mat.angular_velocity_max = 30.0

    var grad = Gradient.new()
    grad.colors = PackedColorArray([
        Color(0.6, 0.6, 0.6, 0.0), Color(0.5, 0.5, 0.5, 0.3),
        Color(0.4, 0.4, 0.4, 0.2), Color(0.3, 0.3, 0.3, 0.0)
    ])
    grad.offsets = PackedFloat32Array([0.0, 0.15, 0.6, 1.0])
    var grad_tex = GradientTexture1D.new()
    grad_tex.gradient = grad
    mat.color_ramp = grad_tex

    # Scale: grow over time (smoke expands)
    var curve = Curve.new()
    curve.add_point(Vector2(0, 0.3))
    curve.add_point(Vector2(0.5, 1.0))
    curve.add_point(Vector2(1, 1.5))
    var curve_tex = CurveTexture.new()
    curve_tex.curve = curve
    mat.scale_curve = curve_tex

    p.process_material = mat
    return p

Rain

Blue-white streaks, strong downward gravity, narrow spread, high particle count.

青白い線、強い下向きの重力、狭い広がり、大量のパーティクル。

func create_rain() -> GPUParticles2D:
    var p = GPUParticles2D.new()
    p.amount = 200
    p.lifetime = 1.0

    # Use a box emission to cover the screen width
    var mat = ParticleProcessMaterial.new()
    mat.emission_shape = ParticleProcessMaterial.EMISSION_SHAPE_BOX
    mat.emission_box_extents = Vector3(600, 0, 0)
    mat.direction = Vector3(0.05, 1, 0)  # Slightly angled
    mat.spread = 3.0
    mat.initial_velocity_min = 400.0
    mat.initial_velocity_max = 500.0
    mat.gravity = Vector3(0, 200, 0)

    var grad = Gradient.new()
    grad.colors = PackedColorArray([
        Color(0.7, 0.8, 1.0, 0.6), Color(0.7, 0.85, 1.0, 0.4),
        Color(0.7, 0.85, 1.0, 0.0)
    ])
    grad.offsets = PackedFloat32Array([0.0, 0.8, 1.0])
    var grad_tex = GradientTexture1D.new()
    grad_tex.gradient = grad
    mat.color_ramp = grad_tex

    # Stretch particles to look like streaks
    mat.scale_min = 0.5
    mat.scale_max = 0.5

    p.process_material = mat
    return p

Sparks火花

Yellow-orange, explosive burst, high initial velocity, short lifetime.

黄色~オレンジ、爆発的な放出、高い初速度、短いライフタイム。

func create_sparks() -> GPUParticles2D:
    var p = GPUParticles2D.new()
    p.amount = 30
    p.lifetime = 0.5
    p.one_shot = true
    p.explosiveness = 1.0  # All at once

    var mat = ParticleProcessMaterial.new()
    mat.direction = Vector3(0, -1, 0)
    mat.spread = 180.0  # Full sphere
    mat.initial_velocity_min = 150.0
    mat.initial_velocity_max = 300.0
    mat.gravity = Vector3(0, 200, 0)  # Fall quickly
    mat.damping_min = 10.0
    mat.damping_max = 20.0

    var grad = Gradient.new()
    grad.colors = PackedColorArray([
        Color(1, 1, 0.8, 1), Color(1, 0.7, 0.1, 1),
        Color(1, 0.3, 0, 0.5), Color(0.5, 0.1, 0, 0)
    ])
    grad.offsets = PackedFloat32Array([0.0, 0.2, 0.6, 1.0])
    var grad_tex = GradientTexture1D.new()
    grad_tex.gradient = grad
    mat.color_ramp = grad_tex

    # Scale: start small, stay small
    mat.scale_min = 0.3
    mat.scale_max = 0.6

    p.process_material = mat
    return p

Snow

White particles, slow gentle descent, wide spread, slight horizontal drift.

白いパーティクル、ゆっくりとした穏やかな降下、広い範囲、わずかな水平方向のドリフト。

func create_snow() -> GPUParticles2D:
    var p = GPUParticles2D.new()
    p.amount = 100
    p.lifetime = 5.0
    p.randomness = 0.8

    var mat = ParticleProcessMaterial.new()
    mat.emission_shape = ParticleProcessMaterial.EMISSION_SHAPE_BOX
    mat.emission_box_extents = Vector3(500, 0, 0)
    mat.direction = Vector3(0.1, 1, 0)
    mat.spread = 10.0
    mat.initial_velocity_min = 20.0
    mat.initial_velocity_max = 40.0
    mat.gravity = Vector3(0, 10, 0)
    mat.damping_min = 1.0
    mat.damping_max = 3.0
    mat.angular_velocity_min = -45.0
    mat.angular_velocity_max = 45.0

    var grad = Gradient.new()
    grad.colors = PackedColorArray([
        Color(1, 1, 1, 0), Color(1, 1, 1, 0.8),
        Color(1, 1, 1, 0.7), Color(1, 1, 1, 0)
    ])
    grad.offsets = PackedFloat32Array([0.0, 0.05, 0.8, 1.0])
    var grad_tex = GradientTexture1D.new()
    grad_tex.gradient = grad
    mat.color_ramp = grad_tex

    mat.scale_min = 0.3
    mat.scale_max = 0.8

    p.process_material = mat
    return p

8. 3D Particles (GPUParticles3D)8. 3Dパーティクル (GPUParticles3D)

GPUParticles3D works identically to GPUParticles2D but operates in 3D space. The same ParticleProcessMaterial is used. Key differences:

GPUParticles3DはGPUParticles2Dと同じ仕組みですが、3D空間で動作します。同じParticleProcessMaterialを使用します。主な違い:

  • All 3 axes of Vector3 are active (X, Y, Z)Vector3の3軸すべてが有効(X, Y, Z)
  • Emission shapes work in full 3D (spheres are actual spheres, boxes are volumes)エミッション形状が完全な3Dで動作(球は本物の球体、ボックスはボリューム)
  • You can use draw_pass_1 with a QuadMesh or custom mesh for billboard particlesdraw_pass_1QuadMeshやカスタムメッシュを使ってビルボードパーティクルを作成可能
  • Mesh particles can use StandardMaterial3D or ORMMaterial3DメッシュパーティクルにはStandardMaterial3DORMMaterial3Dを使用可能
# 3D fire torch example
var particles_3d = GPUParticles3D.new()
particles_3d.amount = 60
particles_3d.lifetime = 1.0

var mat = ParticleProcessMaterial.new()
mat.direction = Vector3(0, 1, 0)  # Upward in 3D
mat.spread = 20.0
mat.initial_velocity_min = 1.0
mat.initial_velocity_max = 2.0
mat.gravity = Vector3(0, -0.5, 0)  # Slight counter-gravity

# Emission from a small sphere
mat.emission_shape = ParticleProcessMaterial.EMISSION_SHAPE_SPHERE
mat.emission_sphere_radius = 0.2

particles_3d.process_material = mat

# Use a QuadMesh as the particle shape
var quad = QuadMesh.new()
quad.size = Vector2(0.3, 0.3)
particles_3d.draw_pass_1 = quad

# Billboard mode: particles always face the camera
mat.billboard_mode = BaseMaterial3D.BILLBOARD_ENABLED

add_child(particles_3d)
Tip: For mesh particles (debris, shells, chunks), assign a custom .tres mesh to draw_pass_1 and apply a StandardMaterial3D to it. Each particle will render as a copy of that mesh. メッシュパーティクル(破片、薬莢など)には、カスタム.tresメッシュをdraw_pass_1に割り当て、StandardMaterial3Dを適用します。各パーティクルがそのメッシュのコピーとしてレンダリングされます。

9. Sub-Emitters9. サブエミッター

Godot 4 supports sub-emitters for particle-on-particle effects. A sub-emitter is another GPUParticles2D/GPUParticles3D node that emits particles at the position of each parent particle. This is ideal for:

Godot 4はパーティクルからパーティクルを生成するサブエミッターに対応しています。サブエミッターは、親パーティクルの位置で新たなパーティクルを放出する別のGPUParticles2D/GPUParticles3Dノードです。以下に最適です:

  • Sparks flying off fire particles炎パーティクルから飛び散る火花
  • Smoke trails behind firework bursts花火の爆発後の煙の軌跡
  • Splash droplets on collision衝突時の飛沫
  • Secondary explosions二次爆発

To set up sub-emitters:

サブエミッターのセットアップ方法:

# 1. Create the sub-emitter node (must be a sibling or child)
var sub_sparks = GPUParticles2D.new()
sub_sparks.amount = 4
sub_sparks.lifetime = 0.3
sub_sparks.explosiveness = 1.0
sub_sparks.emitting = false  # Controlled by parent
var sub_mat = ParticleProcessMaterial.new()
sub_mat.direction = Vector3(0, -1, 0)
sub_mat.spread = 180.0
sub_mat.initial_velocity_min = 50.0
sub_mat.initial_velocity_max = 100.0
sub_sparks.process_material = sub_mat
add_child(sub_sparks)

# 2. Reference it from the parent material
var parent_mat: ParticleProcessMaterial = fire_particles.process_material
parent_mat.sub_emitter_mode = ParticleProcessMaterial.SUB_EMITTER_AT_END
# Also: SUB_EMITTER_AT_COLLISION, SUB_EMITTER_CONSTANT

# 3. Set the sub_emitter property on the parent node
fire_particles.sub_emitter = fire_particles.get_path_to(sub_sparks)

Sub-emitter modes:

サブエミッターモード:

  • SUB_EMITTER_CONSTANTContinuously emit from each parent particle各親パーティクルから連続的に放出
  • SUB_EMITTER_AT_ENDEmit when the parent particle dies親パーティクルが消滅する時に放出
  • SUB_EMITTER_AT_COLLISIONEmit when the parent particle collides親パーティクルが衝突した時に放出
Warning:注意: Sub-emitters only work with GPUParticles, not CPUParticles. Each sub-emitter adds GPU overhead, so keep sub-emitter particle counts low (4-8 per parent particle). サブエミッターはGPUParticlesでのみ動作し、CPUParticlesでは使用できません。サブエミッターごとにGPU負荷が増えるため、サブエミッターのパーティクル数は少なく保ちましょう(親パーティクルあたり4-8個)。

10. Performance Tips10. パフォーマンスのコツ

  • Amount vs Lifetime tradeoff:数量 vs ライフタイムのトレードオフ: Total visible particles = amount. If you increase lifetime, particles accumulate longer. Reduce amount to compensate, or increase it for denser effects. 同時表示パーティクル数 = amountlifetimeを増やすとパーティクルが長く残ります。補正のためamountを減らすか、より密度の高いエフェクトにするため増やしてください。
  • Use Visibility Range (3D):Visibility Range(3D)を使う: Set visibility_range_end on GPUParticles3D so distant particle systems stop rendering. This is a big win for open worlds. GPUParticles3Dにvisibility_range_endを設定すると、遠くのパーティクルシステムがレンダリングされなくなります。オープンワールドでは大きな効果があります。
  • Fixed FPS:固定FPS: Set fixed_fps on the particle node (e.g., 30) to limit simulation updates. Particles will still interpolate smoothly but use less GPU time. パーティクルノードにfixed_fpsを設定(例: 30)するとシミュレーション更新が制限されます。パーティクルは滑らかに補間されますがGPU使用量は減ります。
  • One-shot for bursts:バースト用のOne-shot: For explosion-like effects, use one_shot = true with explosiveness = 1.0. The node can then be freed after the lifetime ends. 爆発エフェクトにはone_shot = trueexplosiveness = 1.0を使用します。ライフタイム終了後にノードを解放できます。
  • Use LOD for 3D:3DでのLOD活用: Combine visibility_range_begin/end with multiple particle nodes at different detail levels for Level of Detail (LOD) particle effects. visibility_range_begin/endを複数の異なる詳細レベルのパーティクルノードと組み合わせて、LOD(Level of Detail)パーティクルエフェクトを実現できます。
  • Avoid overdraw:オーバードローを避ける: Many semi-transparent particles overlapping = expensive fill rate. Reduce amount and use larger particles with lower alpha instead. 半透明パーティクルが大量に重なる = フィルレートのコスト増大。amountを減らし、低アルファの大きなパーティクルを使いましょう。

11. Godot 3 to 4 Migration11. Godot 3から4への移行

If you are migrating a project from Godot 3 to Godot 4, here are the key changes for particles:

Godot 3からGodot 4にプロジェクトを移行する場合、パーティクルの主な変更点は以下の通りです:

Godot 3 Godot 4 Notes備考
Particles2D GPUParticles2D Renamed名称変更
Particles (3D) GPUParticles3D Renamed名称変更
ParticlesMaterial ParticleProcessMaterial Renamed with new features新機能を含む名称変更
CPUParticles2D CPUParticles2D Unchanged変更なし
CPUParticles CPUParticles3D Renamed for clarity明確化のため名称変更
No sub-emitters sub_emitter_mode New in Godot 4Godot 4で新規追加
No trails trail_enabled New in Godot 4Godot 4で新規追加
flag_align_y particle_flag_align_y Property renamedプロパティ名変更
Tip: Godot's project converter handles most renames automatically. However, any ParticlesMaterial references in GDScript will need manual updating to ParticleProcessMaterial. Godotのプロジェクトコンバーターはほとんどの名称変更を自動処理しますが、GDScript内のParticlesMaterial参照は手動でParticleProcessMaterialに更新する必要があります。

Automate Particle Effects with MCP Pro MCP Proでパーティクルエフェクトを自動化

Want AI to create particle effects for you? Godot MCP Pro includes dedicated particle tools with presets for fire, smoke, rain, snow, sparks, and more. Full control over materials, gradients, and emission shapes from a single conversation.

AIにパーティクルエフェクトを作成させたいですか?Godot MCP Proには、炎、煙、雨、雪、火花などのプリセット付き専用パーティクルツールが含まれています。マテリアル、グラデーション、エミッション形状を会話一つで完全制御。

  • create_particles
  • set_particle_material
  • set_particle_color_gradient
  • apply_particle_preset
  • get_particle_info
Get MCP Pro — $5 MCP Proを入手 — $5