【转载】【Unity3D】粒子系统ParticleSystem

1,266 阅读7分钟

原文链接

版权声明:本文为CSDN博主「little_fat_sheep」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:zhyan8.blog.csdn.net/article/det…

原文写得很好,但是主题格式我不太喜欢,所以我对文章的格式进行了修整,方便自己日后阅读

正文

1 简介

拖尾(TrailRenderer)、线段渲染器(LineRenderer)、粒子系统(ParticleSystem)是 Unity3D 提供的三大特效,其中粒子系统的功能最为强大,特效也最炫酷,但操作也最复杂。粒子系统中,不断地有粒子生成和粒子消亡,一般而言,粒子消亡速率和生成速率保持一致(除预热阶段),使得粒子系统保持一个稳定状态。使用粒子系统,可以实现烟花、水泡、枪口火花、核弹爆炸等特效。

在 Hierarchy 窗口右键,依次选择 Effects→Particle System,可以创建一个粒子系统。

7b943ea2ce1048d5bb1bb200c38f89fe.gif

粒子系统的使用非常灵活,主要有以下用法:

  • 控制发射器的形状(圆柱形、圆锥形、球形、圆形等)、发射周期、粒子数、粒子预热、发射延时等;
  • 控制粒子的形状、大小、颜色、材质、速度、旋转、生命周期等,并且在粒子的生命周期内可以修改这些属性;
  • 给粒子添加拖尾特效;
  • 控制多个粒子系统并行或串行发射粒子。

粒子系统属性面板如下:

1dc9b8fc83714c6c8092abc026d4cd9b.png

名称作用
Particle System初始化模块
Emission发射模块
Shape发射器形状模块
Velocity over Lifetime生命周期内速度变化模块
Limit Velocity over Lifetime生命周期内速度约束模块
Inherit Velocity继承父对象的速度,粒子速度会受到其父对象移动的影响
Force over Lifetime生命周期内受力变化模块
Color over Lifetime生命周期内颜色变化模块
Color by Speed颜色受速度的影响模块
Size over Lifetime生命周期内粒子大小变化模块
Size by Speed粒子大小受速度影响模块
Rotation over Lifetime生命周期内方向变化模块
Rotation by Speed方向受速度影响模块
External Forces粒子受外力影响模块
Noise粒子受到随机噪声影响模块
Collision碰撞模块
Triggers触发器模块,如粒子雨,使粒子不会达到屋内
Sub Emitters子发射器模块,多个粒子系统并行或串行发射粒子
Texture Sheet Animation纹理层动画模块,可以控制将一张图片分割成多个部分,每次将其中的一个部分取出作为粒子贴图
Lights光照模块
Trails拖尾模块,可以给粒子添加拖尾效果
Custom Data自定义模块,为粒子自定义数据
Renderer渲染模块,可以设置渲染材质球、拖尾材质球等

2 Particle System(初始化模块)

605856ea43c44550b3d2997cae832d1b.png

名称作用
Duration粒子系统发射粒子的持续时间,当开启 Looping 后,Duration 失效;
Looping是否循环发射粒子;
Prewarm是否开启粒子预热,开启后,粒子个数从 0 逐渐增加到最大值
Start Delay发射粒子之前的延迟,当开启 Prewarm(预热)后不能使用此项;
Start Lifetime粒子初始生命(存活时长),以秒为单位;
Start Speed粒子初始速度
3D Start SIze粒子初始 3D 尺寸,开启后需要设置 X、Y、Z大小;
Start Size粒子初始大小,3D Start Size 开启后此选项消失;
3D Start Rotation粒子初始 3D 旋转,开启后,需要设置粒子在 X、Y、Z 轴上的旋转;
Start Rotation粒子初始旋转角度,3D Start Rotation 开启后此选项消失;
Randomize Rotation随机化旋转,取值 0~1,表示粒子反向(顺时针)旋转的概率;
Start Color粒子初始颜色;
Gravity Modifier粒子受到重力影响;
Simulation Space粒子运动使用的坐标系(本地坐标系、世界坐标系);
Simulation Speed改变粒子系统中所有粒子的速度,取值表示倍数;
Delta Time调整使用固定时间还是帧刷新粒子状态;
Scaling Mode缩放粒子系统的状态;
Play On Awake粒子系统启动后是否开启自动播放;
Emitter Velocity粒子发射后的移动方式,采用 Rigidbody(刚体)还是 Transform(变换)
Max Particles粒子系统中最大粒子个数;
Auto Random Seed自动随机种子,粒子的部分状态随机生成,相同的随机数种子,每次产生的随机数一致
Stop Action当粒子系统发射完所有粒子后的操作,可以添加回调函数或在脚本中重写以下方法:见下方 注1
Constant该属性取值是一个固定常量
Curve该属性取值是一个变量,变量由曲线控制,用户可以自定义曲线;
Random Between Two Constant该属性取值是 2 个常量中的随机数;
Random Between Two Curve该属性取值是 2 个变量中的随机数,变量由 2 条曲线控制,用户可以自定义曲线。

注1:

public void OnParticleSystemStopped()

补充:

属性右边的小三角形都可以展开,用户可以设置某属性 取值方式,如下: e64999b050ae47499d9c7431175d8f51.png

3 Emission(发射模块)

2afbe1d002624249b601c42da646ea68.png

名称作用
Rate over Time发射频率按时间,每秒发射次数(未开启 Bursts 时,每次发射一个粒子);
Rate over Distance发射频率按距离,移动粒子系统时,每米发射次数(未开启 Bursts 时,每次发射一个粒子);
Bursts每次发射开启多少个循环(Cycles),每个循环发射多少个粒子(Count),每个循环的时间间隔是多少(Interval

设置 Bursts(爆炸)参数如下:

8c9e73b08cdc472fb32043ca3aa07b71.png

显示效果如下:

90fac49a69754f40a7d589cfe6e576c6.gif

4 Shape(发射器形状模块)

f59b3b1afa2c4f61bdbc82aa95b37381.png

发射器形状,主要有:

  • Sphere
  • Hemisphere
  • Cone
  • Donut
  • Box
  • Mesh
  • Mesh Renderer
  • Skinned Mesh Renderer
  • Circle
  • Edge
  1. Cone 3aa0517a088a494fbe5c8d9ade840a95.gif
  2. Circle ddbad6e052e44d20849aa8a81b63074f.gif
  3. Spherecddff021b77944d8bff560a75cfe3967.gif

5 Renderer(渲染器模块)

a71604e3a24945399cc8cce03b4b21d9.png

名称作用
Render Mode渲染模式,主要有:
Billboard(广告牌,粒子永远面朝相机)、
Stretched Billboard(可拉伸广告牌)、
Horizontal Billboard(水平广告牌,粒子面朝 Y 轴正方向)、
Vertical Billboard(垂直广告牌,粒子面朝 X 轴正方向)、
Mesh(网格);
Material粒子材质;
Trail Material拖尾特效材质,通常取 Default-Line

6 Collision(碰撞模块)

f6c981b1c6d24e55becb67501a59df29.png

名称作用
Planes碰撞平面;
Dampen阻尼系数,取值 0~1,碰撞后速度减小;
Bounce反弹系数,取值 0~1,碰撞后的反弹力度,取值为 0 时,粒子会贴着平面飞行;
Lifetime Loss生命衰减系数,取值 0~1,每次碰撞生命都会衰减,取 0 时碰撞后粒子正常死亡,取 1 时碰撞后粒子立即死亡;
Visualization可视化平面,网格(Grid)还是实体(Solid);
Scale Plane缩放平面。

点击 Planes 右边的加号,可以添加 碰撞平面(此平面在运行时不可见),此时粒子系统游戏对象上自动添加了个子对象,如下:

image.png

选中 Plane Transform 1 游戏对象,在 Inspector 窗口调整旋转角度,粒子系统显示效果如下:

6e1085660e424139a10fbe579f721f84.gif

7 Sub Emitters(子发射器模块)

名称作用
Birth子粒子系统与主粒子系统同时发射粒子(并行发射);
Collision主粒子系统发生粒子碰撞时,触发子粒子系统发射粒子;
Death主粒子系统粒子消亡时,触发子粒子系统发射粒子(串行发射)

设置主粒子系统每秒发射 1 个粒子(Rate over Time = 1Emission 模块),再添加子粒子系统,如下:

59d511accbb7421b805153582c892fa7.png

此时主粒子系统下面会自动添加一个子粒子系统,如下:

image.png

选中 SubEmitter0

  • 设置初始生命(Start Lifetime)为 1 秒,
  • 初始速度(StartSpeed)为 8米/秒

查看 Emission 模块,发现自动添加了 Bursts,如下:

721159756acf4b03966b95f0a0de8a19.png

粒子系统显示效果如下:

a533292a274c45ad89dbd74e23652ae4.gif

8 Trails(拖尾模块)

粒子系统中的拖尾与 TrailRenderer 组件类似。

391e92fe718744d1ae69dd682c03e25a.png

名称作用
Mode拖尾模式,取值有:Particles(每个粒子拖尾独立绘制)、Ribbon(丝带,相邻粒子拖尾相连)
Lifetime拖尾生命,拖尾长度由 0 增长到最长的时长;
Color over Lifetime拖尾生命周期内颜色变化;
Width over Trail拖尾从头到尾宽度值;
Color over Trail拖尾从头到尾颜色值

设置粒子系统

  • 每秒发射 1 个粒子(Rate over Time = 1Emission 模块),
  • 初始生命(Start Lifetime)为 5 秒,
  • 初始速度(StartSpeed)为 25米/秒
  • 重力(Gravity Modifier)为 1
  • 拖尾材质(Trail MaterialRenderer 模块)为 Default-Line
  • 拖尾(Trails)模块设置见上图的属性面板,

粒子系统显示效果如下:

158c65132e674312bfb85727991c5584.gif

Particle System vs VFX Graph

微信图片_20230214082538.png