18.1 Particle System 概述 Unity 的粒子系统是一个可组合的模块化特效工具,用于创建火焰、烟雾、魔法、爆炸、雨雪等各种视觉效果。
核心模块
模块
功能
Main
基础设置(持续时间、循环、最大粒子数)
Emission
发射速率和爆发
Shape
发射形状(锥体、球体、盒子、网格等)
Velocity over Lifetime
生命周期内的速度变化
Color over Lifetime
颜色渐变
Size over Lifetime
大小变化
Force over Lifetime
受力(风力、重力)
Collision
粒子碰撞
Sub Emitters
子发射器(粒子消亡时触发新粒子)
Texture Sheet Animation
序列帧动画
18.2 创建第一个粒子效果 基础步骤
Hierarchy 右键 → Effects → Particle System
选中粒子系统,在 Inspector 中调整参数
点击 Scene 视图中的粒子预览或直接 Play 查看效果
Main 模块核心参数
参数
说明
Duration
粒子系统运行时长
Looping
是否循环
Start Lifetime
粒子存活时间
Start Speed
粒子初始速度
Start Size
粒子初始大小
Start Color
粒子初始颜色
Max Particles
最大粒子数(控制性能)
18.3 不可用模块(Emission & Shape) Emission 模块 1 2 3 4 5 6 7 8 9 10 11 ParticleSystem ps = GetComponent<ParticleSystem>(); ps.Emit(50 ); ParticleSystem.EmitParams emitParams = new ParticleSystem.EmitParams(); emitParams.position = hitPoint; emitParams.applyShapeToPosition = true ; ps.Emit(emitParams, 10 );
参数
说明
Rate over Time
每秒发射粒子数
Rate over Distance
每移动单位距离发射
Bursts
爆发(一次性发射一批)
Shape 模块
形状
适用效果
Sphere
爆炸、魔法光环
Cone
火焰喷射、手电筒光柱
Box
雨、雪(区域覆盖)
Circle
光环、环形特效
Mesh
从模型表面发射
Donut
甜甜圈形状烟雾
18.4 进阶模块配置 Color over Lifetime
添加颜色渐变关键帧
支持透明度渐变(粒子淡出)
常用于:火焰(黄→红→淡出)、魔法(蓝→紫→透明)
Size over Lifetime
曲线控制粒子大小变化
常用于:烟雾逐渐膨胀、火花逐渐缩小消失
Velocity over Lifetime
添加方向速度变化
搭配 Random Between Two Constants 实现随机漂移
常用于:烟雾向上飘散、火星随机飞溅
Noise 模块(增添自然感)
添加随机扰动,模拟风或湍流
适用于:烟雾、火焰、魔法粒子
开启后粒子运动更自然不规则
18.5 粒子碰撞与触发 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 public class ParticleCollisionHandler : MonoBehaviour { private ParticleSystem ps; void Start () { ps = GetComponent<ParticleSystem>(); var collision = ps.collision; collision.enabled = true ; collision.type = ParticleSystemCollisionType.World; collision.mode = ParticleSystemCollisionMode.Collision3D; collision.sendCollisionMessages = true ; } private void OnParticleCollision (GameObject other ) { Debug.Log($"粒子击中:{other.name} " ); if (other.CompareTag("Player" )) { other.GetComponent<PlayerHealth>().TakeDamage(5 ); } } private void OnParticleTrigger () { List<ParticleSystem.Particle> enter = new List<ParticleSystem.Particle>(); int numEnter = ps.GetTriggerParticles(ParticleSystemTriggerEventType.Enter, enter); for (int i = 0 ; i < numEnter; i++) { ParticleSystem.Particle p = enter[i]; } } }
18.6 性能优化 1 2 3 4 5 6 7 8 9 10 11 12 13 var main = ps.main;main.maxParticles = 100 ; var renderer = ps.GetComponent<ParticleSystemRenderer>();renderer.renderMode = ParticleSystemRenderMode.Billboard;
18.7 本章小结
Particle System 由多个模块组成,按需启用
Main 模块控制基础属性,Emission 控制发射方式
Color/Size/Velocity over Lifetime 创造动态变化
Noise 模块增加随机自然感
粒子碰撞用于实现与游戏世界的交互
控制最大粒子数和使用简单纹理是优化的关键
练习题
制作一个火焰粒子效果(锥形发射 + 黄到红渐变 + 随机速度)
制作一个爆炸特效(球状爆发 + 粒子膨胀 + 子发射器火花)
使用粒子碰撞实现:粒子击中地面时在落地位置生成一个印记
制作一个下雨效果(Box Shape + 速度方向 + 粒子碰撞地面溅射)