一、Renderer 模块
Renderere模块可以直接参考 U3D 官网:Renderer 模块 - Unity 手册,因为有很多的设置可以暂时不需要了解,所以这里就只记录一些重点
常用的 RenderMode
主要分为 2D:广告牌(Billboard) 以及 3D:Mesh
- Billboard:粒子始终面向摄像机。
- Stretched Billboard:粒子面向摄像机,但是有特殊的缩放规则,Camera Scale 为根据摄像机运动拉伸粒子(0为禁用),Velocity Scale 为根据粒子速度按比例拉伸粒子(0为禁用),Length Scale 为沿着粒子的速度方向根据粒子当前大小按比例拉伸粒子(1为默认)
- Horizontal Billboard:粒子面向摄像机,但保证粒子平面与 XZ 平面平行
- Vertical Billboard:粒子面向摄像机,但保证粒子平面与 Y 轴平行
- Mesh:使用 3D 网格渲染粒子。
- None:不绘制粒子,假设你只想要拖尾的话
材质与绘制顺序
- Material / Trail Material:粒子材质和粒子拖尾的材质
- Sort Mode:绘制粒子的顺序,By Distance 为按照离摄像机距离排序、Oldest in Front 和 Youngest in Front 为按照粒子的诞生时间排序
- Sorting Fudge:相对于场景中其它物体的绘制排序矫正,越小的值绘制时机越靠后,例如在 unity 的 2d 模式下,游戏背景的 Sorting Fudge 为 0,此时如果粒子的 Sorting Fudge > 0,就会被背景盖住,所以为了粒子特效能正常显示,一般调整后这个值都会是一个负数
关于 Sorting Layers:
- Sorting Layer:如果你设置了全局的 Sorting Layer,那么这里就要注意
- Order in Layer:在当前的 Sorting Layer 下的渲染顺序
对于 Demo,大部分情况下你只需要关心 Material 和 RenderMode
将粒子系统的数据传入你当前的 shader 当中
- Custom Vertex Streams:是否开启自定义顶点数据流
开启之后,你就可以将其它任意模块的任意数据传入到你的顶点着色器中,需要注意的是:列表中你要传入着色器的数据要和 shader 中定义的 vertex struct 内的 TEXCOORD 一一对应,否则会报错
当然你也可以传入额外的自定义数据,这只需要勾上排在 Renderer 模块前面的 Custom Data 模块即可,这样你就可以在下面 Custom Vertex Streams 的可添加列表中找到对应的 Custom Data
二、粒子序列帧
了解了什么是序列帧动画,这里就简单了

- Mode:Grid 为网格,Sprites 为精灵,如果想要实现序列帧动画这里必然选择 Grid,因为 Sprites 只会是单张的
- Tiles:纹理在 X 和 Y 方向上划分的区块数量,对于上面的图片就是 2x2
- Animation:Whole Sheet 表示整张纹理作为一个动画,Single Row 表示纹理中的每一行为一个独立的动画,选择 Single Row 后会多出来一个属性 Random Row,勾上之后每次就会随机一行播放那一行的动画
- Time Mode:选择粒子系统如何在动画中对帧进行采样:Lifetime 为在粒子的生命周期内使用动画曲线对帧进行采样,Speed 为根据粒子的速度对帧进行采样,FPS 则是根据指定的每秒帧数值对帧进行采样。选择 Lifetime 后会多出来一个属性 Frame over Time,这条曲线指定动画帧随着时间的推移如何增加
- Start Frame:允许指定粒子动画应从哪个帧开始,往往这里都是随机
- Cycles:动画序列在粒子生命周期内重复的次数,一般配合 ④Time Mode 设置
- Affected UV Channels:指定受影响的 UV 通道,不用管
三、Emission 模块
如果想要实现一个这样的效果:启用 Looping 后,在一个粒子系统的周期内,前一半的时间不发射粒子,后一半的时间内发射大量粒子,也就是想要粒子发射具有间歇性,就需要用到 Emission 模块
基本属性:
- Rate over Time:每个时间单位发射的粒子数,可以为小数
- Rate over Distance:每个移动距离单位发射的粒子数,这里的移动指的是粒子系统的 Transform 变化
包括后面的粒子爆发事件,三个属性是独立计算并叠加的,例如在移动的同时过去了1秒,那么移动产生的粒子和单位时间内产生的粒子并不冲突
粒子爆发事件
可以通过设置 Bursts 来增加生成粒子的事件,例如在指定时间段内生成若干个粒子,这些设定在粒子系统的每一个生命周期中生效
- Time:发射爆发粒子的时间(粒子系统开始播放后的秒数)
- Count:每次事件发射的粒子数的值
- Cycles:当前事件发生次数
- Interval:设置触发每个爆发周期的时间间隔(单位:秒)
- Probability:范围 [0, 1],控制每个爆发事件生成粒子的可能性
四、形状(Shape)模块
对于任意不同的形状,这个模块中的属性都不同,一样可以参考 U3D 官网:Shape 模块 - Unity 手册,这里就只记录一些重点

纹理过滤
- Texture:用于为粒子着色和丢弃粒子的纹理
- Clip Channel:纹理中用于丢弃粒子的通道
- Clip Threshold:将粒子映射到纹理上的位置,丢弃像素颜色低于此阈值的所有粒子
- Color Affects Particles:粒子颜色受纹理颜色影响
- Alpha Affects Particles:粒子 Alpha 受纹理 Alpha 影响
- Bilinear Filtering:在读取纹理时,无论纹理尺寸如何,均组合 4 个相邻样本以获得更平滑的粒子颜色变化
形状通用
- Position:粒子发射器形状位置偏移
- Rotation:旋转生成粒子的发射器形状
- Scale:更改生成粒子的发射器形状的大小
- Align to Direction:根据粒子的初始行进方向定向粒子
五、火焰特效
最后一个就是只有一个属性的 Color Over Lifetime 模块:
最后利用这一个属性就可以实现一个简单火焰效果:
- Alpha值:中心实心,边缘透明
- 火焰颜色:中心发黄、外圈发红
那么就有:
搞定!