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

分类:Unity、C#、VS2015 缓存

建立日期:2016-05-02 dom

1、简介

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

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

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

一、粒子系统检视器 oop

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

image

经过使用模块,单独的粒子系统能够显示各类复杂的行为。 学习

它们也能够经过分组到粒子效果 (Particle Effects) 进行扩展。 优化

二、粒子系统编辑器 动画

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

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

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

三、场景视图编辑

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

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

image

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

四、曲线编辑器

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

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

image

含义以下:

(1)Constant--常量

该属性值不随时间变化。

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

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

(3)Curve--曲线

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

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

image

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

image

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

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

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

五、Velocity over Lifetime和Limit Velocity over Lifetime

若是勾选【Velocity over Lifetime】和【Limit Velocity over Lifetime】(见下图):

image

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

image

六、颜色和线性渐变

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

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

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

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

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

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

若是选择 Alpha 标记,则能够经过拖动 alpha 值来编辑该标记的值。

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

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

2、粒子系统模块

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

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

image

注意,因为这个截图中勾选了【Show All Modules】选项,所以它会将全部模块都显示出来(所有都容许),因此没法再勾选某个模块。若是你只但愿选择某一个或多个模块(仅容许选择的模块起做用),取消勾选【Show All Modules】,而后再勾选对应的模块就好了。

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

一、初始化模块(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) 可发射的最大粒子数量。

二、发射模块(Emission)

image

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

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

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

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

三、形状模块(Shape)

image

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) 粒子是在随机方向仍是沿着网格表面方向发射?

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

image

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

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

Space:空间。

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

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

image

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

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

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

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

六、存活时间的受力模块

image

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

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

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

七、存活时间的颜色模块

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

八、颜色速度模块

image

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

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

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

十、存活时间的大小模块

image

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

十一、大小速度模块

image

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

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

十二、存活时间的旋转模块

image

以度为单位指定值。

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

1三、旋转速度模块

image

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

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

1四、外力模块

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

1五、碰撞模块

image

为该粒子系统 (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(假设使用公制单位)。

1六、子发射器模块

image

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

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

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

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

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

1七、纹理层动画模块

image

在粒子存活期间动画化 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) 指定动画速度。

1八、渲染器模块

image

渲染器模块显示 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。

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

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

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

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

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

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

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

相关文章
相关标签/搜索