作者: 吴亚峰 , 杜化美 , 张月霞 , 索依娜

6.3 粒子系统

Unity 4 3D开发实战详解
在第一人称射击游戏中,我们会看到很多爆炸、浪花、血液喷溅等绚丽的特效。这些特效如果通过编程实现,将是一件很烦琐复杂的工作。为了简化这一过程,Unity为开发者集成了粒子系统这一仿真工具,使粒子特效的开发变得更简单。

粒子系统不是一个简单的静态系统,在系统中粒子会随着时间的推移不仅不断变形和运动,而且系统会自动产生新的粒子,销毁旧的粒子。这就能表现出和雨、雪、雾、水波、火焰、焰火、烟尘、流星等现象极其相似的效果,极大地提高游戏的可观赏性。

6.3.1 粒子系统的简介

粒子系统在Unity开发平台下可以很方便地引入,很多绚丽的特效都可以通过几步简单的操作制造出来。在本部分将介绍一下粒子系统的具体创建和应用的操作步骤。

unity 粒子重复循环 unity粒子重力_unity 粒子重复循环

1.基础粒子系统
在菜单栏单击GameObject选项,此时会弹出“游戏对象操作”菜单,选择“CreateOther”选项,则弹出“创建”菜单,接着选择“Particle System”选项。即完成粒子系统的创建,如图6-54所示。

2.组件粒子系统
粒子系统不仅是作为一种游戏对象存在于Unity中的,它还可以作为一种组件(Component)依附在其他的游戏对象的。想象一下燃烧的木头,这就是通过在木头对象上依附了一个火焰粒子系统实现的。下面讲解一下粒子系统作为组件的创建方法。

(1) 在菜单栏中单击“GameObject”选项,弹出对象创建菜单,在此菜单中选择“CreateOther”,则会弹出“创建其他”菜单,在菜单中选择“Cube”,创建出一个立方体对象,如图6-55所示。

(2)选中Cube对象,在菜单栏中单击“Component”选项,弹出组件添加菜单,在此菜单中选择Effects,则会弹出效果添加菜单,在菜单中选择“Particle System”。这时就成功地为Cube添加了一个粒子系统组件,如图6-56所示。

Stnd001说明

本案例的场景文件位于随书光盘中源代码/第6章目录下的 PhysicsEngine/Assets/ scene/ CubeParticle。

unity 粒子重复循环 unity粒子重力_开发者_02

6.3.2 粒子系统的特性

粒子系统是一个相对较为复杂的游戏对象。一般来说,粒子系统包含的组件有粒子系统主体(ParticleSystem)、喷射(Emission)、形态(Shape)、渲染器(Render)。接下来对其进行详细的介绍。

(1)粒子系统主体。

单击选中粒子系统对象,会发现粒子系统开始动了起来,在属性查看器面板中呈现出的是粒子系统的属性设置器,在粒子系统的第1部分是ParticleSystem。在这一部分中,定义了粒子系统的大部分属性值。该组件在属性查看器中的位置如图6-57所示。

在这一组件中,包含的属性以及含义如表6-3所示。

unity 粒子重复循环 unity粒子重力_开发者_03

unity 粒子重复循环 unity粒子重力_粒子系统_04

(2)喷射(Emission)。

喷射中包含两个主要属性,定义了粒子系统的喷射特性,如图6-58所示。

频率(Rate)属性定义了喷射的频率,可以是以时间为标准定义每秒喷射的次数,也可以以距离为标准,定义每单位长度喷射的粒子个数,Rate的第1个参数是喷射次数,第2个参数是喷射基准,可选项为时间(Time)和距离(Distance)。

爆发(Bursts)定义了在某个特定时间喷射一定数量的粒子,这样可以轻松实现爆炸效果。单击该属性右下角的加号可以添加一个预设,第1列Time的数据为喷射的时刻,第2列Particles为瞬间喷射的粒子数目。

说明

Bursts只有在以时间为基准的喷射中才有效。

(3)形态(Shape)。

形态定义了粒子系统的喷射形态,如图6-59所示。粒子系统的形状既可以是系统自带的球体状、立方体状或者半球,也可以有开发者自行指定。这样给予了开发者很大的灵活性。

unity 粒子重复循环 unity粒子重力_开发者_05

形态属性定义了粒子可以被喷射的范围。可选项有球体(Sphere)、半球体(HemiSphere)、圆锥体(Cone)、盒子(Box)和网格(Mesh)。前4个选项可以直接通过单击“Shape”后的属性下拉列表选定,网格(Mesh)选项被单击后会弹出网格选择对话框。选择一个合适的Mesh作为限制范围。相关的属性含义如表6-4所示。

unity 粒子重复循环 unity粒子重力_游戏_06

(4)渲染器(Renderer)。

这一组件中的属性定义了粒子系统中粒子的渲染特性。本组件位于粒子系统修改器的最底端,如图6-60所示。修改这些属性可以更加灵活地使用粒子系统。

unity 粒子重复循环 unity粒子重力_粒子系统_07

渲染器的相关参数直接影响了单个粒子的显示效果,这些参数的具体含义如表6-5所示。

unity 粒子重复循环 unity粒子重力_菜单栏_08

说明

在粒子系统编辑器的最下端还有两个选项,第1个选项Resimulate表示立即将当前的修改保存到仿真系统中并重新模拟。第2个选项WireFrame表示是否显示粒子系统的线框。

6.3.3 粒子系统的组合使用

粒子系统不仅可以单独用来模拟风、霜、雨、雪等单纯的自然景观,也可以进行组合以后实现某些特殊模型的搭建,如火炬特效。火炬特效是实物模型和粒子系统组合实现的,下面通过介绍火炬的实现,重点讲解粒子系统与其他模型的组合使用方式。

(1)首先在3dMax中,将火炬柄模型导出为FBX格式文件放置在某一位置。

(2)导入模型文件,在Unity的资源列表中,鼠标右键单击空白位置,弹出资源操作菜单,选择Import New Assest…,如图6-61所示。在弹出的资源选择对话框中选择刚刚导出的FBX文件。单击Import按钮,即可成功导入模型文件,如图6-62所示。

(3)导入模型文件成功以后,会在资源列表中出现所需的资源,如图6-63所示,将此模型资源左键拖曳至游戏组成对象列表中,调整火炬的位置使其在摄像机的视野之内。并将任意纹理图拖曳到该对象上,为其指定纹理图,如图6-64所示。

unity 粒子重复循环 unity粒子重力_unity 粒子重复循环_09


unity 粒子重复循环 unity粒子重力_unity 粒子重复循环_10

(4)按照顺序GameObject→CreateOther→Sphere进行操作,新建一个球体,如图6-40所示。

(5)选中球体,按照顺序Component→Effects→Particle System进行操作,为球体添加一个粒子系统,如图6-65所示。

unity 粒子重复循环 unity粒子重力_开发者_11

(6)调节球体对象的位置,使其与火炬模型上端部分,具体的相对位置如图6-66所示,接下来缩小球体并将其放置在火炬的内部,使其不可见。

(7)选中球对象,在其粒子系统的Shape组件下,Shape的属性值为“Cone”,并调整球体的旋转状态,使粒子的喷射方向为竖直向上。这样保证了火焰是在燃料喷射方向上进行活动的,这符合日常生活中的火焰形态,如图6-67所示。

(8)在Sphere组件中,设置Duration值为5.0,looping为选中态。startLifeTime为1.5。startsize为1,startSpeed为2,StartColor为红色。MaxParticle值为1000,其他的属性保持默认即可,如图6-68所示。

(9)在Emission组件中设置喷射是按照时间为基准,即Rate的第2个参数为Time,第1个参数为200,Bursts没有任何设置,如图6-69所示。

(10)在Shape中设置Angle为10,Radius为0.01。其他的属性保持默认即可,如图6-70所示。

(11)在Renderer组件中,设置渲染模式(RnenderMode)为Mesh,在下面的Mesh属性选择Cube。其他的保持默认即可,如图6-71所示。

(12)接下来在游戏组成列表中进行设置,将Sphere左键拖动到火炬柄模型上(huoju),此时粒子系统就作为火炬柄的子对象绑定在了火炬柄上。这样粒子系统就会随着火炬柄的移动而移动。经过以上设置,即可达到火炬效果,如图6-72所示。


unity 粒子重复循环 unity粒子重力_开发者_12

unity 粒子重复循环 unity粒子重力_粒子系统_13

unity 粒子重复循环 unity粒子重力_粒子系统_14

unity 粒子重复循环 unity粒子重力_粒子系统_15

unity 粒子重复循环 unity粒子重力_粒子系统_16

unity 粒子重复循环 unity粒子重力_粒子系统_17

说明

本案例的场景文件位于随书光盘中源代码/第6章目录下的 PhysicsEngine/Assets/ scene/particleSystem。读者可以举一反三,将此种方案加以推广,甚至可以将多个粒子系统加以组合达到更加细致精确的效果