用途
本技能面向 Godot 引擎的 GPU 粒子系统,用于创建爆炸、魔法效果、天气、拖尾等视觉特效(VFX)。其核心设计原则是:GPU 加速渲染、基于材质的配置以及子发射器,共同构成高性能的 VFX 方案。
提供的脚本
- vfx_shader_manager.gd:面向高级粒子 VFX 的自定义着色器集成。
- particle_burst_emitter.gd:带自动清理的一次性粒子爆发,适用于 VFX 系统。
必须避免的做法(NEVER Do)
- 不要在性能关键的特效中使用 CPUParticles2D:100 个以上粒子用 CPU 会造成卡顿尖峰。除非目标平台为不支持 GPU 的移动端,否则应使用 GPUParticles2D。
- 不要忘记为一次性粒子设置 emitting = false:爆炸场景若默认 emitting = true,会在 instantiate() 后、定位之前立即发射粒子。应先设为 false,定位后再发射。
- 不要在未于目标平台测试的情况下使用高 amount:1000 个粒子在桌面端没问题,但移动端可能无法承受。应尽早测试,并根据 OS.get_name() 调整 amount。
- 不要忘记对一次性粒子调用 queue_free():爆炸只持续 1 秒,但节点若一直留在场景树中会造成内存泄漏。可用 await create_timer(lifetime).timeout 后再 queue_free()。
- 爆炸不要使用 emission_shape = POINT:所有粒子在同一位置生成会显得扁平。应使用 EMISSION_SHAPE_SPHERE 并设置半径以获得 3D 扩散效果。
- 不要在颜色渐变中遗漏 alpha:粒子在结束时突然消失会显得生硬。应在 1.0 处添加一个 Color(r, g, b, 0.0) 的渐变点以实现平滑淡出。
基础设置
添加 GPUParticles2D 节点,设置 Amount 为 32、Lifetime 为 1.0,爆炸类可设置 One Shot 为 true。
粒子材质配置
通过 ParticleProcessMaterial 配置发射形状、重力、初速度与颜色等参数,例如将 emission_shape 设为 EMISSION_SHAPE_SPHERE、emission_sphere_radius 设为 10.0,gravity 设为 Vector3(0, 98, 0),initial_velocity_min/max 设为 50.0/100.0,color 设为 Color.ORANGE_RED,最后将材质赋给 $GPUParticles2D.process_material。
常见特效
资料给出了爆炸、烟雾拖尾、星光三类效果的完整示例代码。爆炸效果通过 one_shot、amount、lifetime、explosiveness 等属性配合球体发射形状、初速度、重力与缩放范围实现;烟雾拖尾通过方向、初速度、缩放与半透明颜色实现;星光则使用盒状发射形状、零重力、角速度与缩放范围,并加载星星纹理。
按需生成粒子
可通过 preload 预加载爆炸场景,在角色死亡等时机 instantiate 到父节点、设置 global_position 并触发 emitting,最后 queue_free() 原对象。
3D 粒子
GPUParticles3D 的示例使用盒状发射形状、方向 UP、初速度与重力来模拟 3D 粒子效果。
颜色渐变
通过 Gradient 添加多个颜色点(例如黄色、橙色、最终为透明的红色),再将其包装进 GradientTexture1D 并赋给 color_ramp,实现粒子随生命周期变色与淡出。
子发射器
可让粒子再生成粒子(如烟花效果),通过设置父粒子的 sub_emitter 为子粒子路径,并将 sub_emitter_mode 设为 GPUParticles2D.SUB_EMITTER_AT_END。
最佳实践
- 使用纹理塑造形状:为粒子加载纹理,如 res://textures/particle.png。
- 生命周期管理:一次性粒子在等待 lifetime 后自动 queue_free()。
- 性能优化:针对移动端(如 OS.get_name() == "Android")可减半 amount。
参考
Godot 官方文档:Particles。