
1.3.10 粒子系统控制技巧
中国有句古话叫作“万变不离其宗”。做特效也是一样的,再复杂、再高级的效果也都是通过活学活用每个参数命令制作出来的。至于能做到哪种地步就需要看用户对技术的发掘了。
通过之前对粒子系统的学习,相信读者已经初步掌握了粒子系统的相关知识。那么从本节开始将会讲解在特效制作中一些高级效果的控制技巧。
1.3.10.1 设置粒子系统间的显示层级
在特效制作时,经常需要对特效中的粒子系统进行显示优先级排序,设定哪个粒子系统显示在上、哪个粒子系统显示在下。以地面裂痕与地面纹理为例,由于它们本身相距较近,所以很容易发生显示错误的问题。那么要如何才能保证裂痕显示在地面纹理的上方呢?本节会进行详细的讲解说明。
Step 01首先创建两个粒子系统,取消Shape(发射器形状),并设置它们的Start Speed(初始速度)为0,适当调整粒子大小,将粒子系统Max Particles(最大粒子数量)设置为1,将它们放在同一位置坐标点,如图1-263所示。

图1-263
Step 02为了方便观察,把粒子系统Render Mode(渲染类型)修改为Horizontal Billboard(水平布告板),如图1-264所示。

图1-264
Step 03赋予材质贴图。设置地面材质Shader(着色器)类型为Particle/Alpha Blended(粒子/Alpha混合),设置裂痕材质Shader(着色器)类型为Particle/Additive(粒子/附加),如图1-265所示。

图1-265
观察发现当前场景中地面纹理显示在上方,这显然不正确。
如果想要调整渲染排序就需要分别设置两个粒子系统中的Sorting Fudge(排序校正)数值。
Step 04将裂痕纹理粒子系统Renderer(渲染模块)下的Sorting Fudge(排序校正)数值设置为“0”,将地面纹理粒子系统Sorting Fudge(排序校正)设置为“100”。
设置如图1-266所示。

图1-266
Step 05再次查看效果,发现裂痕纹理已经显示在地面纹理上方了,如图1-267所示。

图1-267
由此得出结论,Sorting Fudge(排序校正)数值相对较小时,粒子将会优先渲染。
显示顺序示例:-200>-100>0>100>200。
注意
设置粒子显示层级时,切忌把粒子系统之间的Sorting Fudge差值设置过小,否则排序效果不明显。推荐将差值设置为200左右。
粒子与模型之间的渲染排序知识扩充:在学习粒子间渲染排序的设置技巧后,那么粒子与模型间的渲染排序要如何调整呢?以Cube(正方体)为例进行演示。
首先单击菜单GameObject→3D Object→Cube(游戏对象→3D对象→正方体)创建一个Cube(正方体),然后创建一个粒子系统,将粒子发射器形状设置为Edge(线性发射),修改角度及位置如图1-268所示。

图1-268
观察发现粒子直接穿过了正方体(完全挡住了粒子),并且修改Sorting Fudge(排序校正)没有任何作用。
Unity材质系统中的两个知识点:
(1)粒子系统参数Sorting Fudge(排序校正)仅作用于Shader(着色器)为Particles(粒子系统)类型下的材质。
(2)将模型体设置为Particles(粒子)材质后,默认Sorting Fudge(排序校正)数值为0(数值固定,无法修改)。
这次将正方体的材质类型设置为Particles/Alpha Blended(粒子/Alpha混合),如图1-269所示。

图1-269
粒子系统材质设置为Particle/Additive(粒子/亮度叠加),如图1-270所示。

图1-270
再次调整粒子系统Sorting Fudge(排序校正)数值为“-200”,结果显示如图1-271所示。

图1-271
观察发现,这次粒子系统已经被优先渲染了。
1.3.10.2 粒子向上逐渐拉伸变细消失
在制作Buff(加益状态)类特效时,常常需要加入一些向上飘动的长条形粒子丰富效果,最常见的处理方式就是直接把Renderer Mode(渲染类型)修改为Stretched Billboard(拉伸形布告板)。虽然这样实现了效果,但是觉得动态感觉还不够。
如果希望粒子向上运动的同时逐渐拉伸变细消失,那要如何设置呢?
如图1-272所示为每个粒子的尺寸变化示例。

图1-272
实现方法:
Step 01首先创建一个粒子系统,设置Start Lifetime(粒子初始寿命)为1,如图1-273所示。

图1-273
Step 02将粒子系统Shape(发射器形状)修改为Cone(圆锥形),适当调节Radius(发射器半径),将Angle(发射角度)设置为0,使粒子竖直向上运动,参数设置如图1-274所示。

图1-274
Step 03将Render Mode(粒子渲染类型)设置为Stretched Billboard(拉伸形布告板),设置Speed Scale(速度缩放)及Length Scale(长度缩放)数值,如图1-275所示。

图1-275
Step 04开启Size over Lifetime(生命周期内粒子大小的变化控制)曲线控制模式,如图1-276所示。

图1-276
Step 05赋予材质纹理,播放查看就可以看到每个粒子拉伸并消失的效果了,如图1-277所示。

图1-277
注意
(1)Stretched Billboard(拉伸形布告板)中的内置参数Speed Scale(速度缩放)可以控制粒子横向缩放。
(2)在实际项目制作中结合Color over Lifetime(生命周期颜色)修改粒子的透明度过渡变化可以使特效过渡更加自然细腻。
1.3.10.3 粒子的扰乱飘动效果
直上直下的粒子动画太过单调?不知道怎么制作出丰富变化的粒子?本节讲解如何制作出“萤火虫/火星”一样运动的粒子(粒子由下至上运动,运动过程中摇摇晃晃),如图1-278所示。

图1-278
注意
图1-278中蓝色圆点代表粒子,红色箭头表示粒子的速度方向。粒子匀速沿Y轴运动,并且会受到X、Z轴速度的影响。
首先分析下每个粒子在各轴向的速度变化。
由于X、Z轴速度变化相同(都是随机运动),经过分析可以得到下面的运动曲线,如图1-279所示。

图1-279
Y方向速度为匀速上升,得到Y轴向的运动曲线如图1-280所示。

图1-280
当得出三个轴向速度的曲线变化之后,只要将数值赋予粒子系统的速度控制项即可。
Step 01首先单击菜单GameObject→Particle System(游戏对象→粒子系统)创建一个粒子系统,然后将Start Speed(初始速度)设置为0,Start Lifetime(粒子初始寿命)设置为2~3取随机值,修改粒子大小为0.1~0.5取随机值,如图1-281所示。

图1-281
Step 02将粒子系统Shape(发射器形状)设置为Sphere(球形发射器),适当调节发射器半径,如图1-282所示。

图1-282
Step 03接着启用Velocity over Lifetime(生命周期速度),将其中Space(解算空间)修改为World(世界坐标)并将轴向速度控制类型更改为Random between Two Curves(两曲线间随机)。之所以设置为Random between Two Curves(两曲线间随机)是为了增加粒子运动的随机变化,如图1-283所示。

图1-283
Step 04依照之前的各轴向速度曲线的分析结果,将粒子属性Velocity over Lifetime(生命周期速度)速度曲线依次修改如下。
(1)X轴速度曲线,如图1-284所示。

图1-284
(2)Y轴速度曲线,如图1-285所示。

图1-285
(3)Z轴速度曲线,如图1-286所示。

图1-286
在曲线编辑器视图左上角可以输入数值,该数值对应的是粒子速度的最大值。
在这里,把X、Z轴速度设置为2,Y轴速度设置为5。(设置位置如图1-286左上角红色框。)
Step 05开启Size over Lifetime(粒子生命周期大小),使用Curve(曲线)控制,如图1-287所示。

图1-287
Step 06最后播放粒子系统,就可以看到随机运动效果了。
赋予粒子材质贴图后效果如图1-288所示。

图1-288
注意
由于之前已经分析出了粒子的各轴向速度曲线,所以只要在Velocity over Lifetime(生命周期速度)中修改对应的速度曲线即可。示例效果中粒子速度完全受Velocity over Lifetime(生命周期速度)控制,这也是之前把Start Speed(粒子初始速度)设置为0的原因。
1.3.10.4 设定粒子旋涡运动
很多3D游戏引擎中都有粒子的力场控制功能(例如风场、旋涡场、引力场等),当然Unity 3D也不例外。不过Unity粒子控制起来可没有那么直观,需要动动脑筋才行。那么如何使用Unity模拟出粒子旋涡效果呢?
虽然在Unity中没有那么多的力场类型供选择,但是可以通过对Velocity over Lifetime(生命周期速度)X、Y、Z三个轴向的速度控制来模拟各种力场效果,在本节中将以粒子的旋涡运动效果为例进行演示。
分析以下粒子在旋涡力场的影响下各轴向的运动趋势及速度曲线,如图1-289所示。

图1-289
从图1-289中可以看出,粒子的运动路径是圆形并且始终绕着圆心运动,那么接下来再分析粒子绕行一个周期各轴向的速度变化。
粒子在X轴方向的运动趋势如图1-290所示。

图1-290
根据粒子在X轴方向的速度变化,绘制出粒子在X方向的运动曲线。图1-291表示粒子每旋转一周,X轴方向速度的变化。

图1-291
粒子在Y轴方向的运动趋势如图1-292所示。

图1-292
根据粒子在Y轴方向的速度变化,绘制出粒子在Y方向的运动曲线。图1-293表示粒子每旋转一周,Y轴方向速度的变化。

图1-293
注意
当前运动曲线表示粒子在Y轴没有速度变化,如果想要加上Y轴方向的速度变化,则需要对Y轴曲线也进行控制。例如,把运动曲线修改为向上的斜线表示Y方向速度逐渐增加。
粒子在Z轴方向的运动趋势如图1-294所示。

图1-294
根据粒子在Z轴方向的速度变化,绘制出粒子在Z方向的运动曲线。图1-295表示粒子每旋转一周,Z轴方向速度的变化。

图1-295
注意
对比X轴与Z轴的粒子速度曲线发现,X、Z两轴曲线之间(近似)像是偏移了四分之一个周期。
到这里就已经分析出对应三个轴向的速度变化曲线了,接着只需要依照之前各轴向速度曲线的分析结果,将粒子属性Velocity over Lifetime(生命周期速度)速度曲线依次修改设置即可。
Step 01首先单击菜单GameObject→ Particle System创建一个粒子系统,将Start Speed(初始速度)设置为0,Shape(发射器形状)设置为Sphere(球形发射器),如图1-296所示。

图1-296
Step 02接着启用Velocity over Lifetime(生命周期速度)将Space修改为World(世界坐标)并将轴向控制类型更改为Random between Two Curves(两曲线间随机)。之所以设置为Random between Two Curves(两曲线间随机)是为了增加粒子运动的随机变化,如果设置为Curve(曲线)则随机效果不明显,如图1-297所示。

图1-297
Step 03接着按照之前的分析结果,将各个轴向的运动曲线依次修改,设置如下。
X轴速度曲线,如图1-298所示。

图1-298
Y轴速度曲线,如图1-299所示。

图1-299
Z轴速度曲线,如图1-300所示。

图1-300
Step 04在曲线编辑器视图左上角(图1-300红框位置)可以输入数值,数值对应的是粒子速度的最大值。
在这里把X、Z轴速度设置为5, Y轴速度设置为0。
Step 05最后单击播放就可以看到粒子的环绕运动了,效果如图1-301所示。

图1-301
注意
(1)如果不希望粒子有范围随机效果,则可以将Velocity over Lifetime(生命周期速度)调节为Curve(曲线)单曲线控制模式。
(2)粒子螺旋上升效果与之同理,只需调小当前粒子发射器半径,然后增加Velocity over Lifetime(生命周期速度)Y轴方向速度即可。
1.3.10.5 让粒子上升悬浮一会儿再掉落
制作粒子上升的效果相信大家都知道怎样实现,不过如何使用Unity模拟出粒子悬浮后掉落的效果呢?
下面来分析粒子悬浮的运动趋势,如图1-302所示。

图1-302
从示意图中可以看出,粒子速度的主要影响轴是Y轴,不过在实际制作中为了增加粒子的随机效果,通常也会在X、Z轴加入一些速度变化。
观察得出每个粒子在各轴向的速度运动曲线如图1-303所示。

图1-303
注意
图1-303中Y轴向显示为粒子先加速上升,然后减速上下浮动,最后匀速下落。
Step 01首先创建一个粒子系统,将粒子系统Start Speed(初始速度)设置为0,Start Lifetime(粒子初始寿命)设置为1~5取随机值,修改Start Size(初始大小)为0.4~1取随机值,如图1-304所示。

图1-304
Step 02将粒子系统Shape(发射器形状)设置为Box(方盒体),并修改发射器形状边长为Box X=5,Box Y=1,Box Z=0,如图1-305所示。

图1-305
Step 03接着启用Velocity over Lifetime(生命周期速度)将Space修改为World(世界坐标),并将数值控制类型更改为Random between Two Curves(两曲线间随机),设置X、Y、Z三个轴向运动曲线如图1-306所示。

图1-306
X轴速度曲线,如图1-307所示。

图1-307
Y轴速度曲线,如图1-308所示。

图1-308
Z轴速度曲线,如图1-309所示。

图1-309
设置Y轴的速度曲线(红框位置)速度最大值为10,设置X、Z轴的速度曲线(红框位置)速度最大值为1。
注意
Y轴速度曲线最大值对应粒子上升最大幅度,在实际制作中可以根据制作需求更改曲线上升幅度等参数。
Step 04将粒子系统Render Mode(渲染模式)修改为Mesh(网格体),选取一个石头模型赋予材质,如图1-310所示。

图1-310
Step 05修改完成后,单击播放就可以看到粒子运动了,如图1-311所示。

图1-311
1.3.10.6 粒子初始运动方向被扰乱产生随机效果
粒子初始运动方向统一,随着时间的增加而逐渐偏离原来的运动轨迹。那么这种刚开始运动方向很规律后来变随机的效果要如何实现呢?
以Cone(圆锥体)形状的粒子发射器为例,以下是默认速度与随机扰乱效果图之间的示例,如图1-312所示。

图1-312
从示例图中可以看出,粒子在Start Speed(初始速度)方向时,将会始终依照发射器形状来发射。而随机扰乱效果图中,粒子初始沿着自身速度方向发射,但是在生命周期后半部分发生了扰乱/不规律运动。
通过观察得出各个轴向的速度曲线如图1-313所示。

图1-313
注意
由于粒子有沿着发射器形状发射的特性,通过Start Speed(初始速度)控制速度大小,所以这次不需要对粒子X轴方向速度进行设置,直接将Velocity over Lifetime(生命周期速度)中X轴速度曲线设置为0即可。
接着只需按照分析结果,修改粒子系统数值即可。
Step 01首先创建一个粒子系统,将其旋转值归零,如图1-314所示。

图1-314
Step 02将粒子系统的Duration(发射周期)设置为0.1秒,取消Looping(循环选项),设置Start Lifetime为2。
Step 03将粒子系统的Start Speed(初始速度)设为10~20取随机值,适当调节Start Size(粒子大小),如图1-315所示。

图1-315
Step 04将Rate(发射速率)设置为0,开启Bursts(爆发),设置第0秒发射30个粒子,如图1-316所示。

图1-316
Step 05将Shape(发射器形状)设置为Cone(圆锥体),适当调节Angle(发射角度)及Radius(发射器半径),如图1-317所示。

图1-317
Step 06开启Velocity over Lifetime(生命周期速度),将Space(结算空间)设置为World(世界坐标),如图1-318所示。

图1-318
Step 07设置Velocity over Lifetime(生命周期速度)为Random between Two Curves(两条曲线间取随机),并调节运动曲线及强度值(红框位置),如图1-319所示。
在这里把Y、Z两个轴向的最大速度设置为30(图1-319中红框位置),X轴向最大速度设置为0。

图1-319
Step 08启用Size over Lifetime(粒子生命周期大小),设置动画曲线为粒子大小逐渐消减,如图1-320所示。

图1-320
Step 09设置相关参数后,播放即可,效果如图1-321所示。

图1-321
除了使用速度曲线控制外,还可以用一个更简便的设置方法来实现粒子路径扰乱功能。
大家知道在Unity中除了可以使用速度控制粒子外,还可以通过力场来直接影响粒子,那么接下来将演示用力场控制来模拟这种效果。
Step 01同样创建一个粒子系统(设置参数与上一案例相同,操作不再重复)。
Step 02这次不勾选Velocity over Lifetime(生命周期速度)选项,而改为开启Force over Lifetime(力场控制),将Space(解算空间)设置为World(世界坐标),如图1-322所示。

图1-322
Step 03设置Force over Lifetime(力场控制)为Random Between Two Constants(两个数值间取随机),设置如图1-323所示。

图1-323
Step 04播放查看后效果。力场控制一般会比直接控制速度曲线效果更加自然,如图1-324所示。

图1-324
注意
随着粒子受力场影响时间的增加,粒子的速度变化也会越来越明显。
1.3.10.7 粒子运动时速度逐渐减慢
在特效之中适量加入减速/限速效果,对提高特效整体的节奏感会起到很大作用(例如喷射出的火星效果等)。在Unity粒子系统中本身就有粒子限速模块Limit Velocity over Lifetime(生命周期限速),通过该模块就可以轻松地实现粒子速度逐渐减慢的效果。
本节以火星飞溅效果为例进行演示。
Step 01首先创建一个粒子系统,将其旋转值归零,如图1-325所示。

图1-325
Step 02设置Duration(发射周期)为0.1秒,取消Looping(循环选项),将Start Lifetime(初始寿命)修改为0.3~1.2取随机值,将Start Speed(初始速度)设置为10~40取随机值,将Start Size(初始大小)设置为0.1~0.5取随机值,如图1-326所示。

图1-326
Step 03将Rate(发射速率)设置为0,开启Bursts(爆发)选项,设置第0秒产生30个粒子,如图1-327所示。

图1-327
Step 04发射器形状Shape切换为Cone(圆锥形),适当调节发射Angle(角度)及Radius(半径),如图1-328所示。

图1-328
Step 05启用Limit Velocity over Lifetime(生命周期限速),设置如图1-329所示。

图1-329
Step 06开启Color over Lifetime(生命周期颜色),调节火花的颜色过渡,如图1-330所示。

图1-330
颜色过渡设置如图1-331所示。

图1-331
Step 07启用Size over Lifetime(粒子生命周期大小),调节粒子大小渐变消失,如图1-332所示。

图1-332
Step 08然后给粒子系统赋予一张火星的纹理贴图,在Renderer(渲染模块)中把粒子Render Mode(渲染模式)设置为Stretched Billboard(拉伸模式),设置如图1-333所示。

图1-333
Step 09最后单击播放,就可以看到火星飞溅并逐渐减速消失的效果了,如图1-334所示。

图1-334
注意
在类似效果中(如飞溅出的石块、碎屑)过渡消失过程最好不要直接使用透明度渐变消失,让粒子由大变小逐渐消失看起来会更加自然。
1.3.10.8 通过粒子系统实现落叶3D旋转效果
普通的落叶效果大家肯定知道如何制作的,但是由于默认粒子类型Billboard(布告板)始终朝向摄像机没法制作出自然生动的落叶,那么要如何制作3D旋转的落叶效果呢?
本节使用的是Unity 5.3.0之后加入的新功能3D Start Rotation(3D坐标旋转)。打开新版Unity 3D并创建一个粒子系统,观察发现在粒子控制项中多了一个3D Start Rotation(3D坐标旋转)选项。这个功能将允许我们设置粒子的初始3D旋转值,同时在控制项Rotation over Lifetime(生命周期旋转)中也增加了一个Separate Axes(分离轴)功能,通过该功能可以分别对X、Y、Z三个轴向的自旋转速度进行控制。
Step 01首先创建一个粒子系统,将发射器向X轴旋转90°,使其向下发射粒子,如图1-335所示。

图1-335
Step 02将Start Size(粒子初始大小)设置为0.5~1.5取随机值,开启3D Start Rotation(3D坐标旋转),启用Random between Two Constants(两个数值之间取随机值),修改X、Y、Z三个轴向旋转为0°~360°,如图1-336所示。

图1-336
Step 03适当调整发射速率,如图1-337所示。

图1-337
Step 04发射器形状设置为Cone(圆锥体),将Angle(角度)设置为0,Radius(半径)设置为15,如图1-338所示。

图1-338
Step 05开启Ration over Lifetime(生命旋转周期),单击Separate(分离轴),设置为Random between Two Constants(两个数值之间取随机值),修改X、Y、Z三个轴向自旋转速度为80~200,如图1-339所示。

图1-339
Step 06将粒子系统设置赋予树叶材质纹理,播放效果如图1-340所示。

图1-340
一个简单的树叶旋转飘落的效果就这样制作完成了。通过该功能不但增加了粒子的可控性,还可以让飘落效果更加自然真实。
注意
除了使用3D Start Rotation(3D坐标旋转)属性外,通过粒子系统发射面片同样也可以实现3D旋转的效果。
1.3.10.9 粒子发射模型的妙用
虽然Unity 3D带有动画系统,但是使用动画系统控制模型并不是特别方便。为了方便操作,一些简单的动画可以由粒子系统发射模型体,通过调节粒子参数来制作。例如,常见的刀光效果等。通过粒子系统发射模型也可以实现一些默认模型体不能完成的效果,例如序列动画就可以由粒子发射模型体来完成。
1.粒子系统发射Mesh(网格体)旋转轴控制
在制作特效时,经常需要通过粒子来发射Mesh(网格体)进行控制,这样不但制作方便,也易于调节参数。但是有些时候在3ds Max中制作网格体导入Unity后,不能很好地控制旋转轴。那么如何才能让网格体按照规定的轴向旋转呢?
下面以一个平面为例,希望该平面体沿着世界坐标Y轴旋转运动。
Step 01首先在3ds Max中创建一个简单的模型体,赋予一张贴图,效果如图1-341所示。

图1-341
然后直接将模型体导入到Unity中。
Step 02在Unity中创建一个粒子系统,将粒子系统的Start Speed(初始速度)设置为0,设置粒子系统Max Particles(最大发射数量)为1,如图1-342所示。

图1-342
Step 03开启Rotation over Lifetime(生命周期旋转),设置一个自旋转速度,如图1-343所示。

图1-343
Step 04设置粒子渲染类型为Mesh(网格体),选取在3ds Max中制作的平面网格,如图1-344所示。

图1-344
Step 05赋予粒子系统一张贴图纹理,并播放,如图1-345所示。

图1-345
观察发现当前网格体的旋转方向并不正确。
那么要如何才能让平面网格沿着Y轴旋转呢?
其实很简单,默认粒子系统的发射器形状为Cone(圆锥体),只需取消粒子发射器形状,再次播放粒子系统就可以正确旋转了。
Step 06取消粒子系统的发射器形状,如图1-346所示。

图1-346
Step 07最后效果如图1-347所示。

图1-347
观察发现平面体已经在正确的方向旋转了。
提示
如果粒子发射模型体的旋转轴不正确,除了取消发射器形状外,还可以尝试将粒子发射器Shape(形状)设置为Box(方盒体),并设置Box X、Box Y、Box Z为0。如果这两种设置方法都不行,那就需要在3ds Max中修改模型影响轴了。
2.模型播放序列图
在Unity中模型体默认是不能直接使用序列图的,不过有两种方案可以解决这个问题。
一种是使用粒子系统发射Mesh(网格体)从而实现序列图的播放效果,而另一种是使用脚本来实现。在本节中将学习使用粒子系统在模型上播放序列图的方法。
注意
大家知道粒子的其中一种渲染形态为Mesh(网格体),利用这个特性结合粒子系统内置属性Texture Sheet Animation(纹理篇动画)可以实现序列播放效果。
Step 01首先创建一个粒子系统,取消Looping(循环)循环选项,将Start Speed(初始速度)设置为0,设置Start Lifetime(粒子初始寿命)为1,如图1-348所示。

图1-348
Step 02将粒子系统Rate(发射速率)设置为0,开启Bursts(爆发),第0秒发射一个粒子,如图1-349所示。

图1-349
Step 03取消Shape(发射器形状),如图1-350所示。

图1-350
Step 04将粒子渲染类型Render Mode(渲染模式)设置为Mesh(网格体),单击后面的圆点(如图1-351所示),拾取一个模型体(也可以导入一个自定义模型体)。

图1-351
Step 05赋予粒子系统材质,开启Texture Sheet Animation(纹理篇动画)功能,根据贴图排布来设置Tiles(平铺分布)数值。
图1-352所示为示例贴图及选项设置。

图1-352
Step 06设置完成后,播放粒子系统就可以查看效果了,如图1-353所示。

图1-353
注意
(1)如果想进一步对序列播放速率进行控制,则可以在粒子属性Frame over Time(时间帧)中通过修改动画曲线来调整。
(2)在之后的脚本篇中会讲解运用脚本来实现模型播放序列图的方法。
1.3.10.10 批量修改粒子系统参数
在制作一些群体效果或者复杂特效时,往往会同时使用多个粒子系统。后期修改过程中需要反复调节多个粒子系统的数值,这样不但非常耗时,并且工作效率低。那么有没有一种可以批量修改粒子参数的方法呢?在本节中,就将学习批量修改粒子系统参数的方法。
以特效Effect_Scene_penquan为例,当前希望把特效所有粒子系统中的Max Particles(最大粒子数量)统一设置为10,那么应该如何去做呢?
Step 01首先选择所有粒子系统,如图1-354所示。

图1-354
全选后发现,虽然在Inspector(检测视图)中可以修改粒子系统的Transform(变换)参数,但是粒子本身的其他属性参数却被隐藏无法修改。
Step 02单击Inspector(检测视图)右上角,切换编辑模式为Debug(调试模式),操作如图1-355所示。

图1-355
切换为Debug(调试模式)后,界面显示如图1-356所示。

图1-356
这时发现许多默认Normal(常规模式)下没有显示的相关参数现在都被显示出来了(显示的位置和名称可能与之前会略有不同)。
注意
在Debug(调试模式)下通常会比Normal(常规模式)多出一些设置项,例如Instance ID等。
Step 03然后在属性列表中找到Max Num Particles(Max Num粒子)属性,该参数与Normal(常规模式)下的粒子参数Max Particles(最大数量)意义相同,将其设置为10,如图1-357所示。

图1-357
Step 04把模式切换回Normal(常规模式)并查看粒子系统相关属性,如图1-358所示。

图1-358
Step 05检查发现所有粒子系统中的Max Particles(最大数量)都被统一设置为10(如图1-359所示)。

图1-359
也可以使用该方法批量修改粒子系统中的其他属性参数。
注意
Debug(调试模式)是一个默认不开放的编辑模式,往往在Debug(调试模式)中可以修改一些Normal(常规模式)下无法修改的信息,实现一些意料不到的功能(如切换动画文件的新旧版本等)。
1.3.10.11 粒子系统的发射间隔控制
在特效制作中,可能会遇到这样一种情况,效果中需要粒子系统持续播放一段时间,然后停止发射,隔一会儿后再重新开始发射,并且需要这个过程无限次循环。粒子系统本身并没有持续发射间隔控制功能,唯一的类似功能Bursts(爆发性发射)也无法满足持续性发射的效果要求。那么这个效果要如何实现呢?
以之前的一个项目效果为例:
需要实现鲸鱼浮出水面后开始喷水,喷水结束后下潜(鲸鱼浮出水面总时长5秒,水下停留时长同样也是5秒)。
鲸鱼每次喷水持续时长4.5秒,停留0.5秒后下潜到水底。鲸鱼的动画是上下潜水(间隔规律)无限循环,如图1-360所示。

图1-360
测试了几种方法:①使用粒子系统Bursts(爆发)功能来模拟,但是由于鲸鱼需要持续喷水的时间较长,使用该命令并不满足要求。②使用动画对粒子系统Position(移动)K帧,在鲸鱼上浮时将粒子系统放置在鲸鱼喷水的位置,当鲸鱼下潜时跟着鲸鱼一起下潜。但是这样处理,鲸鱼就没有“开始/停止”喷水的过程了。并且当鲸鱼第二次上浮时,未到水面上就开始喷水,所以也不满足要求。
经过反复研究测试,最后总结出如下两种控制粒子系统发射间隔的方法。
第一种:通过动画系统实现。
Step 01以使用粒子系统制作喷水效果为例,首先创建两个空的Game Object(游戏对象),将喷水特效放置在其子层级,命名为“Effect_penshui”/“Jingyu_penshui”,如图1-361所示。

图1-361
图1-361中Effect_penshui与Jingyu_penshui都是Game Object(空对象)
Step 02打开Add Curve(添加曲线),单击Jingyu_penshui前的三角符号,选择展开项中的Is Active(激活)选项,如图1-362所示。

图1-362
注意
勾选动画文件中的Loop Time(时间循环)选项,将其设置为循环模式(默认勾选状态)。
Step 03接着对Is Active(激活)选项属性进行K帧,设置前5秒是开启激活状态,5秒后关闭激活选项,如图1-363所示。

图1-363
注意
勾选Is Active(激活)选项是开启激活,去除勾选Is Active(激活)选项是关闭激活。
Step 04接下来再添加一个新的关键点来设置停止播放的持续时间,如图1-364所示。

图1-364
现在粒子系统在前5秒是激活状态(开始喷水),后5秒是非激活状态(停止)。由于动画文件是循环模式,所以在游戏运行后,粒子激活5秒后关闭,再等5秒后重新开始激活播放。
Step 05然后将喷水效果中所有粒子系统的Duration(发射周期)设置为3.5秒,设置每个粒子的最大寿命是1秒,并取消粒子系统的Looping(循环选项)。
也就是说,鲸鱼每次完整的喷水过程(从开始喷水到喷水结束)需要持续4.5秒左右。
Step 06最后运行游戏,一个无限循环的喷水效果就制作完成了。
注意
该方法不仅适用于粒子系统,同样也适用于“模型动画”“材质球动画”等各类型效果的重复激活播放。在项目中也可以根据实际需求来调节粒子周期、激活时间以及停止时间等参数。
第二种:通过粒子系统Emission(发射器选项)实现。
Step 01同样以使用粒子系统制作喷水效果为例,首先设置粒子系统的Duration(发射周期)为10秒,Start Lifetime(粒子初始寿命)设置为1秒,开启Looping(循环选项)。
Step 02将粒子系统Emission(发射器选项)中的Rate(速率)修改为Curve(曲线调节模式),如图1-365所示。

图1-365
Step 03接下来调节Emission Rate(发射速率)曲线如图1-366所示。

图1-366
注意
Curve(曲线调节)视图下侧的0~1对应粒子发射周期0~10秒。
曲线横/纵两个轴向分别表示发射速率与发射周期。
Step 04将粒子系统Rate(发射速率)最大值设置为10(图1-366红框位置),设置前3.5秒发射速率为10,3.5秒后发射速率为0(停止发射)。
注意
粒子持续发射3.5秒,每个粒子的寿命为1秒,刚好整个发射过程持续4.5秒。10秒后(满一个发射周期),粒子将再一次重新发射。
Step 05播放粒子系统,一个无限循环的间隔播放效果就制作完成了。
注意
该方法仅适用于粒子系统,如果特效中含有模型动画或者材质球动画等,则建议使用第一种方法来实现。
1.3.10.12 增加粒子系统SubEmitters(子发射器)数量
当制作一些复杂的拖尾效果时,为了增加细节,往往需要使用多个SubEmitters(子发射器),那么当默认数量不够用时应该如何处理呢?
以Brith(产生)出生时产生子发射器为例。
Step 01首先创建一个粒子系统,开启SubEmitters(子发射器)模块,添加两个子发射器,如图1-367所示。

图1-367
观察发现默认最多只能添加两个子发射器。
Step 02取消这三个粒子系统的Shape(发射器形状),取消Looping(循环选项),将粒子系统Lifetime(粒子寿命)为20,将Start Speed(初始速度)修改为0,调节Max Particles(最大粒子数量)为1,如图1-368所示。

图1-368
开启Bursts(爆发性发射)第0秒发射一颗粒子,如图1-369所示。

图1-369
注意
(1)以上设置应用于Particle System(粒子系统)及两个SubEmitters(子发射器)系统。
(2)粒子系统Lifetime(生命周期)设置为20,表示粒子拖尾的持续发射时长为20秒,可以根据需求调节该数值。
Step 03开启两个子发射器SubEmitters(子发射器)的子发射器模块,如图1-370所示。

图1-370
Step 04将特效根级别与父级别的Simulation Space(解算空间)设置为Local(局部坐标),将四个子级别的Simulation Space(解算空间)设置为World(世界坐标),如图1-371所示。

图1-371
Step 05为了方便区分,将这四个子发射器的粒子颜色分别调整为红、黄、蓝、绿,并将这四个子发射器粒子系统的Start Speed(初始速度)设为1,如图1-372所示。

图1-372
Step 06最后运行游戏,单击Simulate(播放粒子系统),在场景中拖曳特效根级别。
注意
运行游戏后,需要单击Simulate(播放粒子系统)(如图1-373所示)才能播放其拖尾粒子效果。

图1-373
观察发现,拖曳后产生了粒子拖尾(如图1-374所示)。

图1-374
注意
通过使用该方法可以任意增加SubEmitters(子发射器)数量,但为了效率考虑,建议不要添加过多。