Skip to main content
AR论坛
 首页 » 资源教程 » Unity3D教程

【Unity】9.3 粒子系统生成器详解

2016年11月05日 14:39:181300

一、简介

上一节已经介绍过了在Unity 5.x中两种创建粒子效果的方式(方式1、方式2)。

这一节我们主要学习第2种方式的基本概念和用法。

Unity 5.x提供的新版粒子系统生成器(Particle System)也叫Shuriken粒子系统,该生成器采用模块化管理,个性化的粒子模块,配台粒子曲线编辑器,使用户很容易就能创作出各种缤纷复杂的粒子效果。

1、粒子系统检视器

粒子系统检视器 (Particle System Inspector) 每次显示一个粒子系统(当前选择的粒子系统),如下图所示:

【Unity】9.3 粒子系统生成器详解 Unity3D教程 第1张

通过使用模块,单独的粒子系统可以显示各种复杂的行为。

它们也可以通过分组到粒子效果 (Particle Effects) 进行扩展。

2、粒子系统编辑器

单击检视器中的【打开编辑器 (Open Editor)...】按钮,就会打开粒子编辑器窗口(Particle System Editor),该窗口中用于显示场景树中相同根下的所有粒子系统。

在粒子系统编辑器 (Particle System Editor)窗口中,可以在【显示全部 (Show All)】和【显示选定 (Show Selected)】之间切换。【显示全部 (Show: All)】将渲染整个粒子效果。【显示选定 (Show: Selected)】只渲染选定的粒子系统。

选定的粒子系统将在粒子编辑器中用蓝色边框高亮显示,也在层级视图 (Hierarchy) 中显示为蓝色。点击粒子系统左上角的图标,可以在层级视图 (Hierarchy View) 和粒子编辑器 (Particle Editor) 中更改选择。如果要多选,按住Ctrl键再用鼠标单击选择即可。

3、场景视图编辑

创建和编辑粒子系统时,既可以利用检视器 (Inspector)直接修改,也可以利用扩展的粒子系统编辑器窗口来修改。不论采用哪种方式,所做的更改都会反映在场景视图 (SceneView) 中。

在场景视图中,还有一个预览面板 (Preview Panel),利用它可在“编辑模式 (Edit Mode)”下通过播放 (play) 、暂停 (pause) 、停止 (stop)和清除播放时间 (scrubbing playback time)等操作来控制当前选择的粒子效果的播放:

【Unity】9.3 粒子系统生成器详解 Unity3D教程 第2张

拖动【播放时间(Playback Time)】标签,即可执行清除播放时间 (Scrubbing play back time) 操作。所有播放 (Playback) 控件都有默认的快捷键,另外还可以在偏好设置窗口 (Preferences window) 中自定义快捷键。

4、曲线编辑器

在检视器视图中,还可以直接利用粒子系统曲线编辑器编辑粒子效果。

检视器中粒子系统模块的很多属性描述了“值”随“时间”变化的情况。该变化可用 MinMax 曲线 (MinMax Curves) 来描述。这些时间动画属性(例如大小和速度)的右边都有一个下拉菜单。例如,单击【Start Lifetime】最右侧的下拉菜单,可选择:

【Unity】9.3 粒子系统生成器详解 Unity3D教程 第3张

含义如下:

(1)Constant--常量

该属性值不随时间变化。

(2)Random Between Two Gradients--在两个渐变中随机选取值

该属性值通过渐变 (RGBA) 随时间变化,并在渐变编辑器指定的两个值中随机选取。

(3)Curve--曲线

该属性值根据曲线编辑器 (Curve Editor) 中规定的曲线随时间变化。

当选择【Curve】时,就会立即在【Particle System Curves】中显示MinMax曲线:

【Unity】9.3 粒子系统生成器详解 Unity3D教程 第4张

曲线中随机生成的值在最小、最大曲线之间,属性值会沿着生成的曲线随时间变化。比如,你可以利用上粒子系统曲线编辑器(Particle System Curves)将随机值改为下面的形式:

【Unity】9.3 粒子系统生成器详解 Unity3D教程 第5张

编辑器中的 x 轴代表时间从 0 到持续时间 (Duration) 属性指定的值,y 轴代表动画属性对应每个时间点的值。y 轴范围可在编辑器右上角的数字字段中调节。

也可以分别单击编辑器(上面的图)中不同的曲线,观察场景中粒子效果的变化。

注意,【-】将删除当前选中曲线,【+】将优化曲线(即最多使用 3 个键就可将曲线变成参数化曲线)。

5、Velocity over Lifetime和Limit Velocity over Lifetime

如果勾选【Velocity over Lifetime】和【Limit Velocity over Lifetime】(见下图):

【Unity】9.3 粒子系统生成器详解 Unity3D教程 第6张

那么,你还可以用更直观的方式用拖放修改值去更改这些参数(注意更改参数时播放预览界面中粒子效果的变化),例如:

【Unity】9.3 粒子系统生成器详解 Unity3D教程 第7张

6、颜色和线性渐变

对于处理颜色的属性,粒子系统 (Particle System) 采用颜色和线性渐变编辑器 (Color and Gradient Editor)让你设置该属性的值。它和曲线编辑器的工作方式相似。

基于颜色的属性在右边有一个下拉菜单,可以从菜单中选择:

  • 线性渐变 (Gradient):
  • 在两个线性渐变中随机 (Random Between Two Gradients)选择取值:渐变 (RGBA) 随时间变化,并在渐变编辑器指定的两个值中随机选取。

【Unity】9.3 粒子系统生成器详解 Unity3D教程 第8张

渐变 (RGBA) 随时间而变化,可在渐变编辑器中编辑。

线性渐变编辑器 (Gradient Editor) 用来描述渐变随时间而变化的范围。它绘制了颜色(RGB 空间,在底部由标记描述)和 Alpha(在顶部由标记描述)。

可以通过点击靠近矩形顶部的区域来为 Alpha 值添加新标记,通过点击靠近底部的区域来为颜色 (Color) 添加新标记。这些标记可以沿着时间线直接拖动。

如果选择 Alpha 标记,则可以通过拖动 alpha 值来编辑该标记的值。

如果选择颜色 (Color ) 标记,可双击该标记或点击颜色条来修改颜色。

要删除标记,直接将其拖至屏幕以外就行了。

二、粒子系统模块

粒子系统最开始默认只启用少数模块。添加或删除模块可更改粒子系统的行为。

可以通过按下粒子系统检视器 (Particle System Inspector) 右上角的 (+) 号来添加新模块。这会弹出如下图所示的选择菜单,在菜单中选择希望启用的模块即可。

【Unity】9.3 粒子系统生成器详解 Unity3D教程 第9张

注意,由于这个截图中勾选了【Show All Modules】选项,因此它会将所有模块都显示出来(全部都允许),所以无法再勾选某个模块。如果你只希望选择某一个或多个模块(仅允许选择的模块起作用),取消勾选【Show All Modules】,然后再勾选对应的模块就行了。

下面介绍粒子系统在检视器视图中显示的各模块的含义。

1、初始化模块(Particaal System)

该模块始终存在,无法删除或禁用。

Duration:持续时间。粒子系统 (Particle System) 发射粒子的持续时间。

Looping:循环。粒子系统 (Particle System) 是否循环。

Prewarm:预热。只可预热循环系统,这意味着,粒子系统 (Particle System) 在游戏一开始时就发射粒子,就像已发射了一个周期的粒子。

Start Delay:初始延迟。粒子系统 (Particle System) 发射粒子之前等待的延迟,以秒为单位。注意,预热的循环系统不能使用初始延迟。

Start Lifetime:初始生命。粒子存活时间,以秒为单位(请参阅 MinMaxCurve)。

Start Speed:初始速度。粒子发射时的速度(请参阅 MinMaxCurve)。

Start Size:初始大小。粒子发射时的大小(请参阅 MinMaxCurve)。

Start Rotation:初始旋转。粒子发射时的旋转(请参阅 MinMaxCurve)。

Start Color:初始颜色。粒子发射时的颜色(请参阅 MinMaxGradient)。

Gravity Modifier:重力修改器。粒子在存活期间受到的重力影响。

Inherit Velocity:继承速度。控制粒子速率的因素应继承粒子系统 (Particle System) 的转换(对于移动中的粒子系统)。

Simulation Space:模拟空间。模拟本地坐标系或世界坐标系中的粒子系统 (Particle System)。

Play On Awake:唤醒时播放。如果启用该项,粒子系统 (Particle System) 会在其创建时自动开始播放。

Max Particles:最大粒子数。粒子系统 (Particle System) 可发射的最大粒子数量。

2、发射模块(Emission)

【Unity】9.3 粒子系统生成器详解 Unity3D教程 第10张

控制粒子发射的速率,允许在某个时刻生成大量粒子(粒子系统 (Particle System) 存续期间)。在爆炸时非常有用,那时需要一次创建大量粒子。

速率 (Rate):单位时间 (Time)(每秒)或单位距离 (Distance)(每米)发射的粒子数量(请参阅 MinMaxCurve)。

突发 (Bursts)(仅限时间 (Time) 选项下):添加粒子系统 (Particle System) 存续期间发生的粒子爆发。

时间和粒子数量 (Time and Number of Particles):指定发射规定数量粒子的时间(在存续期内,以秒为单位)。用“+”和“-”调节爆发数量。

3、形状模块(Shape)

【Unity】9.3 粒子系统生成器详解 Unity3D教程 第11张

Shape:定义发射器的形状,单击右侧的下拉框可选择:球体 (Sphere)、半球体 (Hemishpere)、圆锥 (Cone)、立方体 (Box) 、网格 (Mesh)。可沿着表面法线或随机方向施加初始力。

(1)球体(Sphere)

半径 (Radius) 球体的半径。(也可以在场景视图 (Scene View) 中用手柄操作)。

从外壳发射 (Emit from Shell) 从球体外壳发射。如果禁用此项,粒子将从球体内部发射。

随机方向 (Random Direction) 粒子是在随机方向还是沿着球体表面法线方向发射?

(2)半球体 (Hemisphere)

半径 (Radius) 半球体的半径。(也可以在场景视图 (Scene View) 中用手柄操作)。

从外壳发射 (Emit from Shell) 从半球体外壳发射。如果禁用此项,粒子将从半球体内部发射。

随机方向 (Random Direction) 粒子是在随机方向还是沿着半球体表面法线方向发射?

(3)圆锥 (Cone)

角度 (Angle) 圆锥的角度。如果角度为 0,粒子将在一个方向发射。(也可以在场景视图 (Scene View) 中用手柄操作)。

半径 (Radius) 发射点的半径。如果值接近零,则将从一点发射。如果值超过 0,将创建一个帽子状的圆锥,粒子从一个圆盘而非一个点发射。(也可以在场景视图 (Scene View) 中用手柄操作)。

长度 (Length) 发射量的长度。仅从内部 (Volume) 或内部外壳 (Volume Shell) 发出时可用。(也可以在场景视图 (Scene View) 中用手柄操作)。

发射位置 (Emit From) 确定从哪里发射出。可能的值有底部 (Base)、底部外壳 (Base Shell)、内部 (Volume) 和内部外壳 (Volume Shell)。

随机方向 (Random Direction) 粒子是在随机方向还是沿着圆锥方向发射?

(4)立方体 (Box)

立方体 X 轴 (Box X) 立方体 X 轴的缩放。(也可以在场景视图 (Scene View) 中用手柄操作)。

立方体 Y 轴 (Box Y) 立方体 Y 轴的缩放。(也可以在场景视图 (Scene View) 中用手柄操作)。

立方体 Z 轴 (Box Z) 立方体 Z 轴的缩放。(也可以在场景视图 (Scene View) 中用手柄操作)。

随机方向 (Random Direction) 粒子是在随机方向还是沿着立方体 Z 轴方向发射?

(5)网格 (Mesh)

类型 (Type) 粒子可从顶点 (Vertex)、边 (Edge) 或面 (Triangle) 发射。

网格 (Mesh) 选择网格 (Mesh) – 作为发射形状。

随机方向 (Random Direction) 粒子是在随机方向还是沿着网格表面方向发射?

4、存活时间的速度模块(Volocity over Lifetime)

【Unity】9.3 粒子系统生成器详解 Unity3D教程 第12张

直接动画化粒子的速率。主要用于具有复杂物理特性的粒子,不过该属性只演示简单的视觉行为(例如飘荡的烟雾和温度降低),与物理世界的互动很少。

XYZ:使用曲线常量值或曲线间的随机值来控制粒子的运动。请参阅 MinMaxCurve。

Space:空间。

Local/ World:本地/世界。速度值是本地坐标系还是世界坐标系中的值。

5、存活时间的限制速度模块(Limit elocity over Lifetime)

【Unity】9.3 粒子系统生成器详解 Unity3D教程 第13张

基本上用于模拟阻力。如果超过某些阈值,就会抑制或固定速率。可以按每个轴或每个向量长度配置。

Separate Axis:分离轴。用于设置每个轴控制。

Speed:速度。指定量级为常数或由限制所有轴速率的曲线指定量级。请参阅 MinMaxCurve。

Dampen:阻尼。(0-1)之间的值,控制应减慢的超过速率的幅度。例如,值为 0.5,则将超过的速率减慢 50%。

6、存活时间的受力模块

【Unity】9.3 粒子系统生成器详解 Unity3D教程 第14张

XYZ 使用曲线常量值或曲线间的随机值来控制作用于粒子上的力。请参阅 MinMaxCurve。

空间 (Space) 本地 (Local)/世界 (World):速度值是本地坐标系还是世界坐标系中的值。

随机化 (Randomize) 随机化每帧作用于粒子上的力。

7、存活时间的颜色模块

颜色 (Color) 控制每个粒子在其存活期间的颜色。如果有些粒子的存活时间短于其他粒子,它们将运动得更快。采用常量颜色、两色随机,使用渐变动画化颜色或使用两个渐变指定一个随机颜色(请参阅渐变)。请注意,该颜色将乘以初始颜色 (Start Color) 属性中的值 – 如果初始颜色为黑色,那么存活时间的颜色 (Color Over Lifetime) 不会影响粒子。

8、颜色速度模块

【Unity】9.3 粒子系统生成器详解 Unity3D教程 第15张

根据粒子速度动画化粒子颜色。将定义范围内的速度重新映射到颜色上。

颜色 (Color) 用于重新映射速度的颜色。使用渐变来改变颜色。请参阅 MinMaxGradient。

速度范围 (Speed Range) 界定速度范围的最小值和最大值,该范围用于将速度重新映射到颜色上。

10、存活时间的大小模块

【Unity】9.3 粒子系统生成器详解 Unity3D教程 第16张

大小 (Size) 控制每个粒子在其存活期间的大小。采用固定大小,使用曲线将大小动画化或使用两条曲线指定随机大小。请参阅 MinMaxCurve。

11、大小速度模块

【Unity】9.3 粒子系统生成器详解 Unity3D教程 第17张

大小 (Size) 用于重新映射速度的大小。将曲线用于不同大小。请参阅 MinMaxCurve.

速度范围 (Speed Range) 界定速度范围的最小值和最大值,该范围用于将速度重新映射到大小上。

12、存活时间的旋转模块

【Unity】9.3 粒子系统生成器详解 Unity3D教程 第18张

以度为单位指定值。

角速度 (Angular Velocity) 控制每个粒子在其存活期间的旋转速度。采用固定旋转速度,使用曲线将旋转速度动画化或使用两条曲线指定随机旋转速度。请参阅 MinMaxCurve。

13、旋转速度模块

【Unity】9.3 粒子系统生成器详解 Unity3D教程 第19张

角速度 (Angular Velocity) 用于重新映射粒子速度的旋转速度。使用曲线来改变旋转速度。请参阅 MinMaxCurve。

速度范围 (Speed Range) 界定速度范围的最小值和最大值,该范围用于将速度重新映射到旋转速度上。

14、外力模块

乘数 (Multiplier) 确定粒子受风带影响程度的缩放比例(即风力向量乘以该值)。

15、碰撞模块

【Unity】9.3 粒子系统生成器详解 Unity3D教程 第20张

为该粒子系统 (Particle System) 中的粒子设置碰撞。现在支持世界碰撞和平面碰撞。平面碰撞对简单碰撞检测而言非常有效。通过引用场景中的现有变换或为此创建新的空游戏对象 (GameObject) 来设置平面。平面碰撞的另一个优势是具有碰撞平面的粒子系统可设为预设。世界碰撞采用光线投射,所以必须小心使用,以确保良好性能。然而,在近似碰撞可接受的情况下,低 (Low) 或中等 (Medium) 质量的世界碰撞非常有效。

任何碰撞模块 (Collision Module) 的常见属性:

平面/世界 (Planes/World) 指定碰撞类型:平面 (Planes) 指平面碰撞,世界 (World) 指世界碰撞。

阻尼 (Dampen) (0-1) 粒子碰撞时,其将保持这一速度比例。除非设置为 1.0,否则粒子在碰撞后变慢。

反弹 (Bounce) (0-1) 粒子碰撞时,其会保持这一速度分量比例,该分量与碰撞平面垂直。

生命减弱 (Lifetime Loss) (0-1) 每次碰撞后初始生命周期 (Start Lifetime) 减弱比例。生命周期达到 0 后,粒子死亡。例如,如果粒子应该在第一次碰撞时死亡,则将该属性设为 1.0。

最小杀死速度 (Min Kill Speed) 粒子在被杀死前的最小速度。

发送碰撞信息 (Send Collision Messages) 确定是否要发送碰撞信息,从而确定是否触发游戏对象 (GameObjects) 和 ParticleSystems 上的 OnParticleCollision 回调。

只在平面模式 (Planes Mode) 中可用的属性

平面 (Planes) 平面通过向变换分配引用来定义。该变换可为场景中的任何变换,且可动画化。可以使用多平面。注意:Y 轴用作平面法线。

可视化 (Visualization) 仅用于将平面可视化:网格 (Grid) 或实体 (Solid)。

网格 (Grid) 渲染为小图示,能快速指出在世界中的位置和方向。

实体 (Solid) 在场景中渲染平面,用于精确定位平面。

缩放平面 (Scale Plane) 调整可视化平面大小。

粒子半径 (Particle Radius) 因碰撞目的假设的粒子半径。(因此,粒子视为球体。)

只在世界模式 (World Mode) 中可用的属性

碰撞对象 (Collides With) 用于指定碰撞器的筛选器。选择所有东西 (Everything),来与整个世界碰撞。

碰撞质量 (Collision Quality) 世界碰撞的质量。

高质量 (High) 每帧的所有粒子进行场景光线投射。注意:这是 CPU 密集型应用,只能使用 1000 个(场景宽度)或更少的同步粒子。

中等质量 (Medium) 在每帧中,粒子系统接收一部分全局设置粒子光线投射计划 (Particle Raycast Budget)(请参阅粒子光线投射计划)。粒子以循环方式更新,其中在给定帧中不接收光线投射的粒子将查找和使用高速缓存中存储的较旧碰撞物。注意:这类碰撞属于近似碰撞,会遗漏一些粒子,特别是在角落处。

低质量 (Low) 除了粒子系统每四帧获得一部分粒子光线投射计划 (Particle Raycast Budget)之外,其他与中等质量 (Medium) 相同。

体素大小 (Voxel Size) 用于缓存中等 (Medium) 和低 (Low) 质量设置中所用交集的体素密度。体素大小以场景单位为单位给出。通常会使用 0.5 – 1.0(假设使用公制单位)。

16、子发射器模块

【Unity】9.3 粒子系统生成器详解 Unity3D教程 第21张

是一个强大的模块,可在出现下列粒子事件时生成其他粒子系统 (Particle Systems):粒子产生、死亡或碰撞。

产生 (Birth) 该粒子系统 (Particle System) 中每个粒子产生时生成另一个粒子系统。

死亡 (Birth) 该粒子系统 (Particle System) 中每个粒子死亡时生成另一个粒子系统。

碰撞 (Collision) 该粒子系统 (Particle System) 中每个粒子碰撞时生成另一个粒子系统。

重要提示:需要使用碰撞模块 (Collision Module) 建立碰撞。请参阅碰撞模块 (Collision Module)。

17、纹理层动画模块

【Unity】9.3 粒子系统生成器详解 Unity3D教程 第22张

在粒子存活期间动画化 UV 坐标。动画帧以网格形式显示,或者层中的每行都是单独的动画。帧可以用曲线动画化或者是两条曲线之间的随机帧。动画速度用“周期 (Cycles)” 定义。 重要提示:用于动画的纹理是渲染器 (Renderer) 模块中所发现材质使用的纹理。

平铺 (Tiles) 定义纹理的平铺。

动画 (Animation) 指定动画类型:整层 (Whole Sheet) 或单行 (Single Row)。

整层 (Whole Sheet) 将整层用于 uv 动画。

  • 时间帧 (Frame over Time) 在每个粒子存活期间,在整层上控制其 uv 动画帧。采用常量,使用曲线将帧动画化或使用两条曲线指定随机帧。请参阅 MinMaxCurve。
  • 单行 (Single Row) 将一行纹理层用于 uv 动画。
  • 随机行 (Random Row) 如果选中此项,起始行随机,如果取消选中,则可以指定行指数(第一行为 0)。
  • 时间帧 (Frame over Time) 在每个粒子存活期间,在指定行内控制其 uv 动画帧。采用常量,使用曲线将帧动画化或使用两条曲线指定随机帧。请参阅 MinMaxCurve。
  • 周期 (Cycles) 指定动画速度。

18、渲染器模块

【Unity】9.3 粒子系统生成器详解 Unity3D教程 第23张

渲染器模块显示 ParticleSystemRenderer 组件的属性。

注意,即使游戏对象 (GameObject) 拥有 ParticleSystemRenderer 组件,其属性也只能在此处显示。删除/添加此模块时,实际上是添加或删除 ParticleSystemRenderer 组件。

渲染模式 (Render Mode) 选择下列粒子渲染模式之一。

广告牌 (Billboard) 让粒子始终面向相机。

拉伸广告牌 (Stretched Billboard) 使用下列参数拉伸粒子。

l 相机缩放 (Camera Scale) 决定拉伸粒子时考虑进来的相机速度影响程度。

l 速度缩放 (Speed Scale) 通过对比粒子速度来确定其长度。

l 长度缩放 (Length Scale) 通过对比粒子宽度来确定其长度。

水平广告牌 (Horizontal Billboard) 让粒子与 XZ 平面对齐。

垂直广告牌 (Vertical Billboard) 面向相机时,让粒子与 Y 轴对齐。

网格 (Mesh) 使用网格而非四边形渲染粒子。

- 网格 (Mesh) 渲染粒子所用的网格引用。

法线方向 (Normal Direction) 值 0 至 1,确定法线与相机所成角度 (0) 及偏离视图中心的角度 (1)。

材质 (Material) 广告牌或网格粒子所用的材质。

排序模式 (Sort Mode) 粒子绘制顺序可通过距离、最先生成或最晚生成来排列。

排序校正 (Sorting Fudge) 使用该项影响绘制顺序。具有较小排序校正数值的粒子系统更可能放在最后绘制,因此显示在其他透明对象(包括其他粒子)前面。

投射阴影 (Cast Shadows) 粒子是否会投射阴影?这由材质决定。

接受阴影 (Receive Shadows) 粒子是否会接受阴影?这由材质决定。

最大粒子大小 (Max Particle Size) 相对于视窗大小,设置最大大小。有效值:0-1。

三、粒子生成的相关属性说明

当试图表现不同粒子效果时,生成粒子的属性诸如Size、Energy、Emission、Velocity会使粒子系统具有鲜明的个性。例如,Size较小时可以模拟茧火虫或天空中的星星,较大时可以模拟老旧建筑物中的灰尘。

Energy及Emission属性可以控制粒子在屏幕中将保留多长时间及一次可以显示出多少个粒子。比如火箭会有较高的Emission属性来模拟浓烟,而较高的Emergy属性则可模拟空气中烟雾的缓慢扩散效果。

Velocity属性控制着粒子的运动。可通过脚本来改变Velocity值以便产生更好的效果,或者若想模拟出像风那样持续的效果,可以设定Velocity属性的X和Z值,这会产生粒子类似被吹走了的效果。

四、使用粒子生成器时注意的事项

要谨慎使用大量粒子的效果。粒子数量越多对硬件的要求越高。

Emit属性要与粒子动画器中的Auto Destruct (自动销毁)属性结合使用。通过脚本可以使发射器停止发射粒子,然后自动销毁功能会自动地销毁粒子系统及它所绑定的游戏对象。


评论列表暂无评论
发表评论