HOME / 第 4 部分 · UI 界面 · 动画 · 特效 / 第 42 课
MODULE 4 · UI 界面 · 动画 · 特效
第 42 课 · 粒子系统:爆炸与特效
🎯 本课学习目标
- 理解粒子系统概念
- 用 GPUParticles2D 做爆炸/火花特效
- 用代码控制粒子发射
爆炸、火花、雨雪、星光——粒子系统让游戏「燃」起来。本课做出酷炫爆炸特效。
📖 详细教学步骤
什么是粒子?概念
粒子系统一次性管理成百上千个小粒子,每个粒子有位置、速度、寿命、颜色:
- 爆炸 = 一群向外飞、逐渐变透明变小的粒子
- 火焰 = 不断向上飘、颜色从黄到红的小粒子
- 雪花 = 缓慢飘落、旋转变换的粒子
💡 Godot 4.x 用 GPUParticles2D(GPU 加速,更高效)。
添加粒子并选材质搭建
- 添加节点
GPUParticles2D,命名 Explosion - 选中它 → 检查器 Process Material → 新建
ParticleProcessMaterial - 粒子默认是白色小点,可在 Texture 放一张圆形光斑图
常用粒子参数参数
| 参数 | 作用 |
|---|---|
| Amount | 粒子数量(爆炸用 50-200) |
| Lifetime | 每个粒子存活秒数 |
| Emission Shape | 发射形状(Sphere 球状向外) |
| Direction/Spread | 初始方向与扩散角 |
| Initial Velocity | 初始速度(爆炸要大) |
| Gravity | 重力(火花向下飘) |
| Scale Curve | 粒子大小随时间变化(爆炸越来越小) |
| Color Ramp | 颜色随时间变化(黄→橙→红) |
调出一个爆炸效果实操
- Amount = 120
- Lifetime = 0.6
- Emission Shape = Sphere(半径小)
- Initial Velocity = 400,Spread = 180(四面八方)
- Gravity = (0, 300)
- Color Ramp:黄 → 橙 → 红 → 透明
- Scale Curve:1 → 0.2
- One Shot 勾选:只发射一次(爆炸是一次性的)
- 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 避免随父节点删除。