HOME / 第 4 部分 · UI 界面 · 动画 · 特效 / 第 42 课
MODULE 4 · UI 界面 · 动画 · 特效

第 42 课 · 粒子系统:爆炸与特效

⏱ 预计时长 35 分钟📊 难度 进阶📚 模块 第 4 部分 · UI 界面 · 动画 · 特效

🎯 本课学习目标

爆炸、火花、雨雪、星光——粒子系统让游戏「燃」起来。本课做出酷炫爆炸特效。

📖 详细教学步骤

什么是粒子?概念

粒子系统一次性管理成百上千个小粒子,每个粒子有位置、速度、寿命、颜色:

  • 爆炸 = 一群向外飞、逐渐变透明变小的粒子
  • 火焰 = 不断向上飘、颜色从黄到红的小粒子
  • 雪花 = 缓慢飘落、旋转变换的粒子

💡 Godot 4.x 用 GPUParticles2D(GPU 加速,更高效)。

添加粒子并选材质搭建

  1. 添加节点 GPUParticles2D,命名 Explosion
  2. 选中它 → 检查器 Process Material → 新建 ParticleProcessMaterial
  3. 粒子默认是白色小点,可在 Texture 放一张圆形光斑图

常用粒子参数参数

参数作用
Amount粒子数量(爆炸用 50-200)
Lifetime每个粒子存活秒数
Emission Shape发射形状(Sphere 球状向外)
Direction/Spread初始方向与扩散角
Initial Velocity初始速度(爆炸要大)
Gravity重力(火花向下飘)
Scale Curve粒子大小随时间变化(爆炸越来越小)
Color Ramp颜色随时间变化(黄→橙→红)

调出一个爆炸效果实操

  1. Amount = 120
  2. Lifetime = 0.6
  3. Emission Shape = Sphere(半径小)
  4. Initial Velocity = 400,Spread = 180(四面八方)
  5. Gravity = (0, 300)
  6. Color Ramp:黄 → 橙 → 红 → 透明
  7. Scale Curve:1 → 0.2
  8. One Shot 勾选:只发射一次(爆炸是一次性的)
  9. Explosiveness = 1:一次性全爆

用代码触发爆炸代码

把粒子做成「预置特效」挂在敌人身上,死亡时触发:

GDSCRIPTextends CharacterBody2D

@onready var explosion: GPUParticles2D = $Explosion

func die():
    # 把粒子脱离父节点,防止随自己一起删除
    explosion.reparent(get_parent())
    explosion.emitting = true        # 开始发射
    explosion.one_shot = true
    # 粒子播完自动删除
    explosion.finished.connect(explosion.queue_free)
    queue_free()   # 删除敌人本体

粒子跟随(火焰/拖尾)进阶

想要持续火焰/拖尾:

  • 不勾选 One Shot(持续发射)
  • Emitting 保持 true
  • 粒子作为父节点子节点会跟着移动

💡 玩家移动时的喷气拖尾、火焰特效都这样做。

⚠️
粒子不显示?

检查:①Emitting 是否开启;②Amount 是否大于 0;③Process Material 是否创建;④粒子材质参数是否合理(速度太慢会聚集在原点)。

⚠️
爆炸后粒子跟着敌人一起没了?

用 reparent() 把粒子移到父节点下再触发,或让粒子独立成场景实例化。

🧪 动手试一试

🏋️ 课后练习

给敌人做爆炸特效:死亡时喷出 150 个火花,黄→红渐变,0.8 秒内缩小消失。

GPUParticles2D + One Shot + Color Ramp + Scale Curve + reparent。

💡

GPUParticles2D 可以「本地坐标」选项让粒子跟随节点旋转。

💡

把常用特效存成 .tscn 场景,哪里都能复用。

🎓 本课小结

GPUParticles2D 用粒子材质控制数量/速度/寿命/颜色曲线,One Shot 做一次性爆炸,Emitting 控制持续发射,reparent 避免随父节点删除。