Particle System
粒子系统是Unity的一个组件,在 Component -> Effect -> Particle System 可以找到,但是该组件的 Inspector 选项很多,我们来一一梳理,明白了每个选项代表的意义和应用场景,才能更好的定制符合要求的效果;
在Scene中创建一个粒子系统,默认是这样的显示:
为了绘制的便利,我们打开粒子系统的Editor界面:
1. Particle System(初始化模块)
该模块是粒子系统和粒子的初始化模块,无法将其删除或禁用.
该模块定义了粒子系统初始化的基本参数.
- Duration: 粒子系统发射粒子的时间,单位是 s ;如果选择了下面的 Looping 选项,那么表示一个生命周期的时间.
- Looping: 如果选中,粒子系统会按照生命周期时间进行循环发射.
- Prewarm: 预热系统,只有在循环模式先才能选择,如果开启了此项, Start Delay将不可选择.顾名思义,未开启的时候,粒子系统会发射粒子会经过一个从无到有的过程,开启后就好像跳过了这个过程,直接从第二个生命周期开始播放.
- Start Delay: Prewarm开启状态下无效.粒子系统延迟几秒开始播放.点击选项后面的小三角可以看到选项如下(后续的很多配置项都有类似的选项,相同的就不再赘述了):
- Constant: 常量,设置一个固定数值;
- Random Between Two Constants: 在两个常量之间随机得到一个数值.
- Start Lifetime: 单个粒子的存活时间,点击后面的小三角后:
-
Curve: 一个生命周期内,在特定时间发射的粒子,它的存活时间取决于对应曲线上的值.
Random Between Two Curves: 特定时刻发射的粒子存活时间为两条曲线间的随机值
-
- Start Speed: 粒子的起始速度,控制选项同上.这个选项控制的只是起始速度,单个粒子在生命周期内的速度变化是另一个模块 Velocity over Lifetime 来控制的.
- 3D Start Size: 开启此选项后可以分别控制粒子XYZ三个轴上的初始大小(但是目前测试改变Z轴没有效果,有知道的小伙伴请留言指导一下),和 Start Lifetime 一样,有四个控制选项.
- Start Size: 粒子的起始大小, 与 3D Start Size 不能同时使用.
- 3D Start Rotation: 开启此选项后可以分别控制粒子在每个轴的初始旋转角度.
- Start Rotation: 默认控制粒子在Z轴的初始旋转角度,与 3D Start Rotation 不能同时使用;
- Flip Rotation: 翻转旋转,取值是0~1,主要是针对 Start Rotation 设置的角度,如果设置的是10°,那么这个值设置的越大,会有更多的粒子以-10°的角度发射.
- Start Color: 粒子的初始颜色,该设置有5个控制选项,如图所以,粒子系统的颜色设置一般都是这几个控制选项:
- Color: 所有的粒子都是一个颜色.
- Gradient: 粒子系统在一个生命周期内为生成的粒子赋予对应的渐变色,点击后会出现一个操作板.
可以看到,在粒子系统的一个生命周期内,产生的粒子的颜色是按照设置的从白到红的渐变色来设置的. - Random Between Two Color:粒子颜色是在指定的两个颜色之间随机获取,注意与上面渐变色的区别.
- Random Between Two Gradient: 粒子颜色随着生命周期是在指定的两个渐变色之间随机获取,这里不再截图,请大家自行测试.
- Random Between Two Gradient: 基本与 Random Between Two Color 一样,但是可以控制随机颜色的数量,比如可以设置在5种颜色之间随机.
- Gravity Modifier: 重力修改器.给粒子施加一个重力效果,如果是负值,则会给粒子施加一个向上的力,值越大,受到的力效果越明显.
- Simulation Space: 模拟空间.粒子生成后使用谁的坐标系统,一般在运动的时候才能看到效果;
- Local: 使用粒子系统的坐标系统.
- World: 使用场景的世界坐标系统.
- Custom: 选择该项后,需要指定一个GO,然后粒子会使用该物体的坐标系.
- Simulation Speed: 模拟速度.整体改变粒子系统的播放速度,跟改变下面图中的 Playback Speed 效果是一样的,这个面板是随着粒子系统出现在Scene视图中的.
- Delta Time: 变量时间, 在游戏中 Time. timeScale 用来控制整个游戏时间的流速,0是暂停,1是按照真实世界的时间流速运行.
- Scaled: 被Time. timeScale控制,当游戏暂停时,粒子系统停止播放.
- Unscaled: 不受Time. timeScale控制,游戏暂停的时候粒子系统依然播放.
- Scaling Mode: 缩放模式,粒子的缩放模式. Gravity Modifier 属性不受此模式影响.
- Hierarchy: 粒子的大小和运动速度不仅受到粒子系统的Scale影响,也受到父物体(如果存在)的Scale影响.
- Local: 粒子仅受到粒子系统的Scale影响.
- Shape: 只缩放粒子系统的发射器形状大小,对粒子没有影响.
- Play On Awake: 选中后,粒子系统被实例化出来时会自动播放,不选中的话,需要代码控制粒子系统的播放,不影响 Start Delay 属性的设置.
- Emitter Velocity: 发射速率.当粒子系统移动的时候,我们应该用它的 Transform 还是 Rigidbody 来计算它的速率(并不理解这个属性,烦请了解的小伙伴留言告诉我一下).
- Max Particles: 最大粒子数.当系统中的粒子数达到此值后,将会暂停发射粒子.
- Auto Random Seed: 选中后,每次开始模拟粒子发射时,粒子的效果都不一样,反之未选中后,每次开始模拟后,粒子的效果都一样,可以通过 Particle Effect 窗口的 Restart 来验证.
- Random seed: 当不勾选上面的选项后,需要设置该项,给一个随机的Seed值,可以通过调节该值,找到一种符合需求的粒子发射效果,然后使用该固定的Seed值.
- Stop Action: 停止行动.当粒子系统停止发射并且所有的粒子销毁后,持有该粒子系统的GO应该如何行动:
- None: 默认选项,什么都不做.
- Disable: GO的Active设置为false.
- Destroy: 销毁该GO.
- Callback: 为该GO添加脚本或者再原有脚本中监听以下函数:
即可监听到粒子系统的完全停止.public void OnParticleSystemStopped()
- Culling Mode: 剔除模式.当粒子系统从屏幕中移出的时候,对应的处理方式:
- Automatic: 如果粒子系统是循环发射,则会暂停发射,非循环情况下不会暂停发射.
- Pause And Catch Up: 暂停粒子播放,当再次移入屏幕时,会做额外的计算,使粒子系统看起来像没有被暂停过一样,当然是耗性能的设置,根据实际情况使用.
- Pause: 暂停粒子发射.
- AlwaysSimulate: 不会暂停粒子发射.
- Ring Buffer Mode: 环形缓冲模式.控制粒子的消失方式,这个模式适合用来做脚印或者弹孔等持续性的效果.
- Disable: 粒子在自己的生命周期后销毁.
- Pause Until Replaced: 粒子在生命周期后并不会被销毁,保持最后的形态直至系统中的粒子数超过最大限制后立即被新粒子取代.
- Loop Until Replaced: 这种模式跟上一种很像,在自己的生命周期后不会销毁,选择该设置后会增加一个 Loop Range 的选项:
可以设置从0 ~ 1的值,这个值表示的是粒子生命周期的比重,比如设置的是0 ~ 0.5,如果粒子的生命周期是2s,那么经过2s后,粒子会重复显示0s ~ 1(2 * 0.5)s这段时间内粒子的效果,直至超过系统最大粒子数后被新粒子取代.
2. Emission(发射模块)
粒子发射的速率,以及瞬间发射大量粒子(爆炸效果),可以在该模块进行设置.
Rate over Time: 按照时间发射的粒子速率.该属性有4个配置,原理不再赘述,其中曲线的横轴是时间轴,代表的是粒子系统的生命周期.
-
Rate over Distance: 按照粒子系统移动距离发射的粒子速率.这种情况在编辑模式下不能查看,我们编写一个脚本移动粒子系统,可以看到随着粒子系统的移动,粒子在不断的发射.
该属性也有4个配置可以选择. -
Bursts: 粒子爆发.可以用一句话来概述这个功能: 在指定的 Time 时刻, 瞬间发射 Count 设置的粒子个数, 如果 Cycles 设置为循环, 那么每隔 Interval 的时间,就会有 Probability 的概率再次爆发.要注意超过系统的最大粒子限制后就不再发射粒子了.
- Time: 粒子爆发的时间,不能超过粒子系统的 Duration ,就算你填写一个非法的数,也会被强制修改.
- Count: 如果选择曲线,曲线的横轴是时间轴,代表的是粒子系统的生命周期.4个配置可以选择.
- Cycles: 从爆发时间开始的循环次数.
- Interval: 两次循环的间隔时间.超过粒子系统的 Duration 无意义.
- Probability: 每次爆发的可能性.
根据图示的设置,来看一下表现效果:
暂歇片刻,我们再来看下一篇文章.