Unity的粒子系统(四)

Hello,小伙伴们久等了, 让我们继续未竟之事.
粒子在一个生命周期内应该有哪些属性的变化,才能达到多姿多彩且有趣的效果呢?
我们不妨来思考一下:

  • 速度: 前面介绍过了,可以通过改变速度或者施加力来实现
  • 颜色: 通过颜色改变使得粒子的画面效果绚丽无比
  • 尺寸: 对尺寸的更改可以模拟物体消融,膨胀,或者逐渐消失的效果
  • 旋转 : 粒子的旋转可以使其看起来更加动态逼真,比如空中的雪花,爆炸后的粉尘等等.
    当然,还有别的属性变化,但在我看来,以上四种是最重要的,通过以上四种属性变化的组合,可以完成大部分的效果,从粒子系统的模块设置条目中可见一斑.不知道小伙伴们还有没有其他的想法呢?

7. Force over Lifetime(生命周期内受力)

Force over Lifetime

在粒子的生命周期内模拟给粒子施加力的效果,类似粒子受到重力的效果.由于施加的力是持续的,因此粒子的运动是有加速度的.
举个例子,比如火焰上的烟雾,刚开始生成的时候受到热空气的影响会加速上升,然后遇冷后速度逐渐变慢,最后落到地面,这个过程我们就可以使用该模块的 Curve 选项来解决.

  • XYZ: 分别设定施加力的每个轴分量,可选择的四个Option不再赘述.
  • Space: 施加的力是基于Local还是World坐标系,当大家看多了关于力的设定,会发现一般情况下当需要设定力时都会有这个选项.
  • Randomize: 只有当选中 Random Between Two Constants 或者 Random Between Two Curves 时才能对其进行勾选.根据文档的意思,是在每一帧内都改变粒子所受力的方向,当然,这个力的方向是从设定的两个边界值中随机获取的,从而得到更紊乱和不规则的粒子运动.
    对于这一点,我是抱有怀疑态度的,也进行了测试,反而发现不勾选的情况下粒子运动更无序 ...另一个疑惑是,如果我设定的是 Random Between Two Curves, 每个时刻所受的力本就是在两个曲线之间来随机的,为何还要再 Randomize 一次呢?如果能解答这两个问题的小伙伴,请在留言解惑.

8. Color over Lifetime(生命周期内颜色)

Color over Lifetime

这个模块简单明了,就是控制粒子在生命周期内的颜色,不做太多的说明啦.

9. Color by Speed(颜色的速度控制)

根据粒子速度的快慢显示不同的颜色.

Color by Speed

当我们设置 Color over Lifetime 时,也会使用到 Gradient Editor ,不过它的颜色盘的长度表示的是粒子的生命周期,而在该模块,代表的是 Speed Range 的范围,小伙伴要注意区别.

  • Color: 设置不同速度对应的颜色值
  • Speed Range: 设置受到颜色影响的速度值的下限和上限.它对应的是颜色盘的最左和最右.不在该范围内的粒子使用最靠近的边界颜色.

为了更好的调试出效果,我们把主模块的粒子的 Start Speed 设置为0, 打开刚学习的 Force over Lifetime 模块,使粒子的速度不断变化,然后就可以看到如下的效果:

sample graph
.
其实使用的情景大家也能想到了,加速的流星,炮弹等,速度越快,颜色越明亮,可以使用该模块来设置.

10. Size over Lifetime(生命周期内大小)

该模块改变的是 Size 的属性,大家能想到哪些情况下会用到么?我想到的是孙悟空收集元气弹时,元气弹会逐渐的变大,然后一声 Boom,世界和平了!!

Size over Lifetime

相信大家也看到图中红色的提示了,当我们把主模块中 Start Size 设置为0的时候,不管怎么调整这里的曲线,都不会看到有粒子产生.经过测试发现,如果 Start Size 设置为0.5,这里曲线纵轴的最大值为1,那么粒子真正的大小是 0.5 * 1 = 0.5.希望大家能注意这个问题.
我们可以使用该模块来模拟元气弹,逐渐变大的烟雾团等效果.

  • Separate Axes: 对粒子三个轴的尺寸单独设置
  • Size: 通过曲线和常量来设置大小

11. Size by Speed(粒子大小的速度控制)

这个模块跟 Color by Speed 很相似,只不过一个改变的是 Color 属性,一个是 Size 属性.

Size by Speed

  • Separate Axes: 是否对粒子三个轴进行单独设置
  • Size: 设置不同速度下对应的粒子大小
  • Speed Range: 设置哪些粒子受到尺寸变化的影响,左侧的值对应 Curves 图表中横轴的最小值,右侧的值对应图表的横轴最大值,不在该速度范围内的粒子,大小使用最接近的边界值.比如我设置的速度限值是0 - 3.5,那么小于0的尺寸为0,大于3.5的尺寸为1 * StartSize.

12. Rotation over Lifetime(生命周期内的旋转)

该模块也很简单,控制粒子生命周期内的旋转速度.


Rotation over Lifetime

项目中需要一个 效果,当礼花碎片飘散下来的时候,使用该模块设置了旋转速度先快后慢,看起来很立体.

  • Separate Axes: 对粒子三个轴的旋转单独设置
  • Angular Velocity: 旋转的角速度,有四个Option可以选择.

使用该模块,同样可以模拟树叶和雪花的飘落.

13. Rotation by Speed(旋转的速度控制)

根据速度来改变自己的旋转.举个例子,在斜坡上的滚石,速度越快,那么自身的旋转速度应该越大.


Rotation by Speed
  • Speed Range: 只有当 Angular Velocity 选择了 Curve 或者 Random Between Two Curves 时才能使用该选项,原因很简单,只有当角速度是可变化的值时设置该选项才有意义.

其实这里的 ConstantRandom Between Two Constants 选项我觉得是多余的,因为它们跟速度并没有关联起来,后续版本也可能会删除,在 Rotation over Lifetime 同样可以实现这两个选项的功能.

你可能感兴趣的:(Unity的粒子系统(四))