10.粒子系统
本节我们来学习 Unity 的 Shuriken 粒子系统。
10.1 粒子系统
粒子系统是一个组件或对象,可以发射其他对象,我们称之为粒子(particle)。粒子通过设置可以实现非常多的效果。如可以创建喷射的火焰、滚滚的浓烟、萤火虫、雨水、雾气等。这些效果通常称为粒子效果。
10.1.1 粒子
粒子是由粒子系统发射的单个实体。大多数粒子是 2D 广告牌,广告牌是一种总是面向摄像机的平面图像。
10.1.2 Unity 粒子系统
要在场景中创建一个粒子系统,可以添加一个粒子系统对象,或者给现有的对象添加一个粒子系统组件。可以通过 GameObject -> Effects -> Particle System 来添加,添加组件可以使用 Add Component -> Effects -> Particle System 来添加。
Unity 中的粒子默认是小白色的球体,它们会逐渐消退成透明的。
10.1.3 控制选项
当向场景中添加粒子系统后,在场景视图中开始发射粒子,同时显示粒子系统控制选项,如下图所示:
控制选项允许在场景中暂停、停止和重新开始粒子动画。
- Playback Speed - 播放速度
- Playback Time - 播放时长
要创建复杂的效果,通过多个粒子系统协同工作来实现。当多个粒子系统协同工作时称之为粒子效果。
在 Unity 中,创建粒子效果是通过把粒子系统嵌套在一起实现的。
10.2 粒子系统模块
粒子的外观、行为及它们产生的效果都是由模块决定的。模块是定义某种行为的多个属性。在 Shuriken 粒子系统中,模块是一个集成的、必要的组件。默认情况下,所有模块都是可见的,只启用 Emission、Shape 和 Renderer 模块。单击模块名称可展开该模块。
10.2.1 默认模块
默认模块为 Particle System。该模块包含每个粒子系统都需要的所有属性。
- Duration - 粒子系统的运行时长,单位为秒
- Looping - 持续时间达到后是否重新开始
- Prewarm - 在开始运行时就好像已经从前一个周期发射了粒子一样
- Start Delay - 系统在发射粒子前将等待的时长,单位为秒
- Start Lifetime - 每个粒子的存活时长,单位为秒
- Start Speed - 粒子的初始速度
- Start Rotation - 粒子的初始旋转角度
- Start Color - 发射的粒子的颜色
- Gravity Modifier - 给粒子应用的重力
- Inherit Velocity - 在粒子上表现出了多快的系统速度
- Simulation Space - 在本地空间还是游戏世界空间里模拟粒子
- Play On Walk - 是否在创建粒子系统时立即开始发射粒子
- Max Particles - 一个系统每次可以存在的粒子总数。如果到达该数系统就会停止发射
10.2.2 Emission 模块
Emission 模块用于确定发射粒子的速率。使用该模块可以指定粒子以恒定的速率或脉冲方式还是以它们二者之间的某种方式发射。其属性如下:
- Rate - 在一段时间或距离内发射的粒子数
- Bursts - 如果选择速率的时间选项,它将用于指定脉冲次数。
10.2.3 Shape 模块
Shape 模块确定由发射的粒子构成的形状。形状选项包括:Sphere、Hemisphere、Cone、Box、Mesh 等。每个形状具有一组用于定义它的属性。
10.2.4 Velocity over Lifetime 模块
Velocity over Lifetime 模块通过对每个粒子应用 x 轴、y 轴和 z 轴的速度,直接制作每个粒子的动画。属性如下:
- xyz - 应用于粒子的速度,可以是一个常量、曲线或者常量与曲线之间的一个随机数
- Space - 在本地空间还是游戏世界空间添加速度
10.2.5 Limit Velocity over Lifetime 模块
可以用于抑制或固定粒子的速度。本质上它会阻止粒子超过某轴或所有轴上的速度阈值,或降低它们的速度。属性如下:
- Separate Axis - 不选中该属性表示每个轴都使用相同的值。选中则会显示每个轴的速度属性以及用于本地或世界空间的属性
- Speed - 速度阈值
- Dampen - 如果粒子的速度超过阈值,会把它的速度减慢这个值,取值为 0~1,值 0 表示不会减慢,值 1 表示减慢 100%
10.2.6 Force over Lifetime 模块
该模块类似于 Velocity over Lifetime 模块,差别是该模块给每个粒子应用一个力而不是速度。
10.2.7 Color over Lifetime 模块
Color over Lifetime 模块允许随着时间的流逝更改粒子的颜色。可用于创建火花效果。
10.2.8 Color by Speed 模块
Color by Speed 模块允许基于粒子的速度更改其颜色。属性如下:
Color - 指定粒子颜色的渐变
Speed Range - 映射到颜色渐变的最低和最高速度值,也就是低速粒子的颜色映射到渐变的左边,高速粒子的颜色映射到渐变的右边。
10.2.9 Size over Lifetime 模块
Size over Lifetime 模块允许指定粒子的大小变化,其值是一条曲线,并且将指定随着时间的消逝,粒子将增大或收缩。
10.2.10 Size by Speed 模块
Size by Speed 模块将基于粒子的速度(在最小值和最大值之间的速度值)更改其大小。
10.2.11 Rotation over Lifetime 模块
Rotation over Lifetime 模块允许指定粒子本身的旋转角度,其值可以是一个常量、曲线或者随机数。
10.2.12 Rotation by Speed 模块
Rotation by Speed 模块基于粒子的速度改变旋转角度。旋转将基于最小和最大速度值而改变。
10.2.13 External Forces 模块
External Forces 模块允许对存在于粒子外部的任何力应用一个系数,比如模拟场景中存在风力。属性如下:
- Multiplier - 依赖于力的值增大或减少力。
10.2.14 Collision 模块
Collision 模块允许为粒子设置碰撞。用于各种碰撞效果。
Collision 模块的公共属性:
- Type - 碰撞类型,选项:Planes 将碰撞预定的平面,World 将碰撞场景中的任何对象
- Dampen - 当粒子发生碰撞时速度的降低值,取值 0 ~ 1
- Bounce - 确保保留了多少速度的分量,只影响粒子弹跳的轴,取值 0 ~ 1
- Lifetime Loss - 确定粒子在碰撞中失去多少寿命,取值 0 ~ 1
- Min Kill Speed - 粒子在被碰撞销毁前的最低速度
- Send Collision Messages - 确定是否把碰撞消息发生给粒子发生碰撞的对象
Planes 选项的属性:
- Planes - 确定粒子可以碰撞什么位置的变换集合。所提供的变换的 y 轴确定了平面的旋转方式
- Visualization - 确定如果在 Scene 视图中绘制平面,它们可以是实心的或者网格
- Scale Plane - 调整平面的可视化区域的大小
- Particle Radius - 可用于使粒子看似更大或更小
- World 选项的属性:
- Collides With - 确定粒子碰撞的是哪些层。默认为 Everything
- Collision Quality - 碰撞的质量,值为 High、Medium 和 Low
- Voxel Size - 用于确定在媒介和低质量设置中使用的 Voxel 的密度
示例:
1.创建一个新项目或场景,然后添加一个粒子系统,位置为(0,0,0)。
2.在 Inspector 视图中选中 Collision 模块启用。
3.单击 Planes 旁边的加号,这时会出现一个平面,并且粒子已经弹跳到平面上,改变视角观察粒子。
4.向场景中添加一个立方体,定位于(0,4,0),缩放(5,1,5)。
5.观察粒子如何直接经过立方体。
6.将 Collision 模块设置为 World 模式,这时粒子开始弹跳到立方体上。
10.2.15 Sub Emitter 模块
Collision 模块能够在某些事件中为当前系统的每个粒子再生一个新的粒子系统。当创建粒子或粒子死亡或发生碰撞时,可以创建一个新的粒子系统。
可以用于生成复杂的、难以理解的效果(如:烟花)。
属性:
- Birth - 创建粒子时创建粒子系统的数量
- Death - 死亡时创建粒子系统的数量
- Collision - 碰撞时创建粒子系统的数量
10.2.16 Texture Sheet 模块
Texture Sheet 模块允许更改在粒子的寿命中用于粒子的纹理坐标。可以把用于一个粒子的多种纹理放在一幅单独的图像中,然后在粒子寿命内在它们之间切换。其属性如下:
- Tiles - 确定纹理的拼贴方式
- Animation - 确定时整幅图像还是只有单独一排包含用于粒子的纹理
- Cycles - 指定动画的速度
10.2.17 Renderer 模块
Renderer 模块指定绘制纹理的具体方式。其属性如下:
Render Mode - 渲染模式,包括 Billboard、Stretched Billboard、Horizontal Billboard、Vertical Billboard、Mesh。
Normal Direction - 粒子在多大程度上面向摄像机,值 1 将导致粒子直接面向摄像机
Meterial - 用于绘制粒子的材质
Sort Order - 绘制粒子的顺序
Sorting Fudge - 确定绘制粒子系统的顺序。值越小,则越有可能在其他对象和粒子的顶部绘制粒子系统
Cast Shadows - 确定粒子是否会投射阴影
Recieve Shadows - 确定粒子是否会接收阴影
Max Particle Size - 设置最大的相对大小,取值 0 ~ 1
10.3 曲线编辑器
在不同的模块中设置时,有些属性可以选择 Constant 或 Curse。Constant 选项需要提供一个值,而 Curse 选项则可以使属性值在经过一段时间后发生变化,这时就需要曲线系统来设置。
当选择 Curse 时,在 Inspector 视图的底部可以看到曲线编辑器,如下图所示:
右击曲线,可以选择 Add Key 来增加关键点,每个关键点都可以用鼠标拖拽。
示例:
1.创建新项目或场景,然后添加一个粒子系统,位置为(0,0,0)。
2.单击 Start Size 属性旁边的下列箭头后选择 Curse。
3.在数轴上将 1 修改成 2,使曲线的范围设置为 2。
4.在中点附近右击添加关键点,把这个关键点拖拽到顶部。
5.观察粒子系统产生的粒子的大小变化。