Particle System
粒子总共有个Transform组件和Particle System组件
Transform
可以控制粒子在世界或者本地坐标的改变。但是有点注意的是,如果你改变Scale属性值是不会影响粒子的大小缩放的。所以我们想改变粒子大小不能这么改。
Particle System
改变粒子的属性,比如大小,发射速度等等。这个也是我们制作粒子的核心组件。
基本属性:
(1)Duration:粒子持续的时间,什么意思?就是你发射器发送粒子持续的时间。可能还有些绕,举个例子,比如你打火机打开,点个烟。从打开到熄灭火这个过程火焰持续在燃烧,那么这个时间段就是Duration。再举个例子,你煤气在烧两壶水,一个烧水10分钟,一个烧水5分钟。那么煤气灶是粒子发射器,火焰是粒子,10分钟和5分钟就是持续时间。
我们做个小实验,我们把loop勾去掉,因为这个会影响Duration,如果是loop循环发射那么Duration就为无穷大,没有意义。把Duration改成5和1分别试下。
(2)Looping:循环发射粒子。我们打钩之后,粒子发射器就会不断的持续的发射粒子,不管你的Duration调成多少,他都是一成不变的管自己发射。
(3)Prewarm:预热粒子发射。什么意思,当我们开始发射粒子的时候,是不是粒子数量从0开始,然后才慢慢增多,可看到上面额gif。但是当我们勾选这个,他就会在我们点击发射的时候,他不是从数量0开始,而是像已经发射一个周期一样。(注意他只是在Looping打钩的情况下才能使用)
可以看到我一点发射,他数量就已经是发送一个周期的数量。
(4)Start Delay:延迟多长时间开始发射粒子。也就是说我们点击开始发射,他会暂停这么多时间后,然后才开始发射粒子。
(5)Start Lifetime:开始粒子的生命周期。这个值就是单个粒子的生命周期。就像我们人类的寿命一样,比如有个人的寿命80,过了80年,他就从世界上消失了。那么如果一个粒子的开始生命周期是5秒,那么这个粒子发射到Unity3d的World中,过了5秒之后,这个粒子就消亡了,道理是一样的。
那么我们想让不同的粒子有着不同的生命周期,那么怎么弄?放心,在unity中我们生命周期的值是可以设置随机不同的值。具体看下Inspector视窗中的属性:
可以看到他支持4中不同类型的值:
(1.Constant:常量。也就是每个生命周期都一样。
(2.Curve:曲线。
举个例子,假如我Duration是3秒,生命周期钥匙曲线值,那么我弄得曲线是如图。
那么这个曲线是什么意思呢,纵坐标表示生命周期的值,横坐标表示Duration的值。
假如我们在点(0.5,4)做文章,也就是说在一个粒子在粒子发射器已经持续发射0.5秒后发射出来,那么他对应的生命周期就是是4秒,所以越往后面发射生命周期越小,消亡越快。
(3.Random Between Two Constants:随机在两个常量之间。也就说粒子生命周期定在这两个常量中间。比如我定的两个常量是1,10。那么粒子生命周期可能是1,可能是3,可能是10,反正不会超过或者小于两个值。
(4.Randow Between Two Curves:随机在两条曲线之间。
这个也是类似的,但是取值就是两条曲线之间的取值,比如我在图中已经画出了一条直线,如果Duration刚好是图中直线的x坐标值,那么这条直线和两条曲线相交的两个值,那么这个生命周期就会随机从这两个中取一个。
OK,终于讲完了取值。接着我们看。
(6)Start Speed:开始速度。粒子出生具有的速度,这个值也是可以有4中类型的,因为有些粒子速度快点,有些慢点。
(7)Start Size:开始大小。粒子出生具有的大小。跟速度一样,也是4种类型的。
(8)Start Rotation:开始旋转方向。粒子出生具有的旋转方向。也是4种类型的值。
(9)Start Color:开始颜色值。粒子出生具有的颜色。
Start Color的Gradient模式,这个是颜色渐变值,什么意思?当我们选择Gradient渐变的模式时:
会出现这编辑器,那么怎么制作呢?很简单,我们只要在空白双击就会出现指标,然后不同的指标改变不同的颜色,那么怎么会有上下浮标。
这里上面是Alpha的值,下面是Color的值。
(9)Gravity Multiplier:受重力影响的值。也就是说这个值越大,那么受到重力越大。
(10)Inherit Velocity:继承速度。也就是说这个值是影响粒子受到发射器速度的影响。
(11)Simulation Space:发射坐标。什么意思?这里有两个参数可供选择。第一个是Local(默认),第二个是World,这两个有什么区别呢?
区别还是蛮大的,首先我们知道粒子是从粒子发射器里面发射出来的,但是粒子发射出来后是属于粒子发射器还是世界的?这里如果是Local的话,也就是说粒子还是属于本地粒子发射器的,粒子发射出来后,粒子发射器在哪里粒子就在哪里。
但是World就截然不同,它表示发射出来的粒子是属于世界的,已经不是属于粒子发射器的,所以当你移动粒子发射器,已经发射的粒子还是留在原地。
(12)PlayOnAwake:是否在激活就播放。
(13)Max Particles:最多粒子数。就是一个duration内发射粒子最多数量。如果是1的话,一个duration只发射1.
Emission
1.Rate:每秒发射多少粒子(简称发射速率)。什么意思,比如你的Duration是5秒,Max Particles是50的话,你Rate为10,那么就是每秒发射10个粒子,5秒就发射50个。但是现在如果把Rate改成50的话,那么一秒一次性发射50个粒子,也就是说把所有的发射完了,那么就下来的4秒就没有粒子可以发射了。
2.Bursts:粒子集。可以看到粒子集右边有个+号的按钮,我们点击就会出现Time和Particles的参数选择。
那么这两个参数是干嘛用的,其实就是在0.00时刻,发射30个粒子。
我们还可以点击+号继续添加不同时刻发射不同数量的粒子。比如我继续添加在4.00时刻发射30粒子。
这里注意下,这个Time时刻是不能超过Duration持续时间,不然的话是没有效果的,还有发射粒子的总数和不能超过Max Particles,不然的话发射总数还是Max Particles,只不过超过的部分自动被截断了。还有得吧Rate改成0,因为没有速率可言。
Shape
发射形状。粒子被约束在这个形状中发射
1.Sphere:球体。粒子被约束在这个球体中发射。 (1.Radius。球体半径。 (2.Emit from Shell:是否粒子发射是在圆形的表面发射。默认是圆形体内任意位置。 (3.Random Direction:是否是随机方向。默认是跟形状相关的从中心向外发散方向,比如球体就是爆炸方向。如果是随机方向的话,就是胡乱发射。但是他还是被约束在球体里面发射。只不过发射的方向变了而已。
2.HemiSphere:半球体。粒子被约束在这个半球体内发射。 (1.Radius:半球体的半径。 (2.Emit from Shell:是否粒子发射是在半球体的表面发射。默认是半球体内任意位置。 (3.Random Direction:跟球体类似。本来是从球体中心发散出去,但是勾选这个之后,就随机方向发射。
3.Cone:椎体。粒子被约束在这个椎体中发射出去。 (1.Angle:锥形斜面和垂直方向的夹角。如0度就是圆柱。90度就是跟平面类似。 (2.Radius:锥形底面的半径。 (3.Length:底面和顶面的距离。也就是圆锥的高。这个参数是受第4个参数的影响,如果是从Base(底面)发射,那么Length就没有用。如果是Volume(体积)发射,那么Length就有用。因为体积肯定和高度有关嘛。 (4.Emit form:从哪里发射:总共有4种:
1.Base:圆锥底面。粒子是从圆锥体的底面的任意位置沿着体积方向发射出去。
2.BaseShell:圆锥底面周长边。粒子是从圆锥底面的周长边沿着侧表面的方向发射。与Base唯一的区别就是一个是沿体积,一个是沿侧面。
3.Volume:体积。粒子是从圆锥体内的任意位置沿着体积的方向发射出去。
4.VolumeShell:体积侧面。粒子是从圆锥体的侧面的任意位置沿着侧面方向发射出去的。
(5.Random Direction:与上面讲的随机类似。
4.Box:长方体。粒子被约束在长方体内发射。 (1.Box X:x方向上的长度。 (2.Box Y: y方向上的长度。 (3.Box Z:z方向上的长度。 默认发射粒子是在长方体内的任意位置沿着z方向(与xy平面垂直)发射。 (4.Random Direction:随机长方体。
5.Mesh:网格。粒子被约束在网格里面发射。 可以看到我这里选择了一个Plane网格,那么上面的参数Triangle是什么鬼。这个参数是表示粒子在哪里反射。总所周知,网格由顶点,线段,面构成。那么Triangle代表是三角面。
有三个选择:
1.Vertex:粒子就是从网格的顶点发射出去。 2.Edge:粒子是从网格的边长发射出去。 3.Triangle:粒子从网格的面发射出去。
OK,经过长篇大幅,终于把Shape这个组件讲完了。我们来总结下这个Shape的作用,他主要是约束粒子发射的形状,比如火焰当然得用Cone锥形,然后夜明珠就得用Sphere球体。
Velocity over Lifetime
速度受粒子的生命周期影响
假如说我们将x改成4,那么粒子在x方向的速度是4,那么在粒子的生命周期内,他的x方向速度是4,其他方向速度是0。也就是说他会偏向x方向移动。
同理,y和z方向也是类似的。
那么下面的Space是什么,就是这个x方向的速度是受父类速度影响(Local)还是不受父类影响(World)。主要是根据不同类型粒子改变不同方向上的速度。如下雨,肯定不是直直的下着带有点倾斜的下着,所以这里改变下方向速度就可以实现。
Limit Velocity over Lifetime
限制粒子速度
(1.Separate Axis:是否限制3个方向的速度。当我们打钩之后,会有x,y,z三个方向的速度限制。
(2.Speed:总体限制的速度。
(3.Dampen:速度限制倍数。我发现永远为1,不懂为什么。
这个组件其实就是为了防止在其他地方修改导致粒子速度过快或者过慢。
Force over Lifetime
粒子在不同方向受力
这个组件其实就是改变粒子不同方向上的加速度
主要应用场景很多,比如喷泉,我们在z方向施加往下的力,类似的场景很多,凡是跟重力相关的都可以用上。
Color over Lifetime
粒子颜色随着生命周期的改变而改变
这个组件是用来改变粒子颜色,但是这个颜色变化是根据粒子的生命周期而变化的
我在生命中期的颜色改为红色,可见粒子发射出来的时候在中间位置颜色变成红色。
Color by Speed
这个组件也是用来改变粒子颜色的,只不过这次是根据粒子的实时速度来变化的。
Size over Lifetime
粒子大小随着生命周期而变化
Size by Speed
粒子大小随着速度而变化
Rotation over Lifetime
粒子旋转方向随着生命周期而变化
Rotation by Speed
粒子旋转方向随着速度而变化
Collision
粒子碰撞效果
这个组件用来处理粒子与其他碰撞器之间的碰撞检测。
Type:其他碰撞体类型是Planes还是World 如果是Planes的话,那么规定死了,粒子只能与这些Planes,也就是面碰撞 如果是World的话,我们可以选择在世界坐标下所有的碰撞的layer来剔除。在参数中多了个Collides With,这里选择我们需要的layer
Visualization:可视化类型,有分Grid和Solid:
Grid:(网格,在编辑过程中可以看见具体的碰撞器边界)
Solid(实体),没有边界,但是他的实体就是边界,没啥差别。
Scale Plane:面的缩放大小,也就是碰撞器的缩放大小。 Dampen:碰撞器表面的摩擦力大小。如果大于0的话,表明粒子碰到碰撞器后速度会减少。 Bounce:弹力。默认为1,如果为0的话,表示不能反弹,那么就只能沿着碰撞器表面滑行。 Lifetime Loss:碰撞之后粒子生命周期减少。 Min Kill Speed:顾名思义。粒子碰撞后如果速度小于这个速度的粒子会销毁 Particle Radius:粒子半径。
Sub Emitters
自粒子发射器
分为三个阶段:
1.Birth(本粒子出生的时候,那么子粒子会跟着本粒子出生)
2.Collision(本粒子碰撞的时候,会产生子粒子)
3.Death(本粒子死亡的时候,会产生子粒子)
这里注意所谓粒子是单个粒子,不是整个Particle System。可能读者会误以为整个本体Particle死亡的时候才产生粒子,这里是个误区,其实是Particle的单个小粒子。
比如我在出生的搞个子粒子。那么每发射一个小粒子,会持续产生子粒子,注意持续。因为我没有在本体粒子Death处理任何事,也就是说本体粒子没有消亡之前,一直会产生子粒子。
Texture Sheet Animation
序列帧动画
1.Tiles :(这里是UV坐标,其实可以理解为xy分别表示把整张图切成几块,比如x等1,y等2,表示整张图,x部分整张,y部分被切成两块,这样就表示整张图被切成上下两个部分,这样帧动画就拿着两个部分循环替换出现,如果x等2,y等2,那么就整张图被切成四块,帧动画取四块交替)
2.Animation:(表示去哪个部分做帧动画)
(1-Whole Sheet:表示整张图,根据上面的UV)
(2-Single Row:单行)比如x=2,y=2就表示两行,row=0,就交替第一行的图片,row=1,就交替第二行的图片。
3.Frame over Time: 在粒子生命周期里面,播放第几帧的图片)就拿上面的来讲,总共有4帧图片,那么这里我写0的话,他会播放第一帧的图片,写1的话,播放第二帧的图片,如果是曲线的话,那么就会在生命周期里面,交替出现不同的帧图片,也就形成了帧动画。
4.Cycle:在生命周期内循环播放次数)基本上为1
Renderer
渲染组件,就是渲染粒子的材质球
Renderer Mode:渲染模式
(1-Billboard):渲染出来的粒子永远朝向摄像机,也就是说摄像机无论在哪个角度,他都是表现材质球的正面。
(2-Stretched Billboard):渲染出来的粒子可以进行缩放,但是没有正面朝向摄像机。什么叫正面,就是说他原先发射的粒子什么方向就是什么方向。
调整Scale来拉伸粒子,这三个参数随便改动那个都行。
(3-Horizontal Billboard):渲染出来的粒子都是水平朝向。
(4-Vertical Billboard):渲染出来的粒子都是竖直朝向。
(5-Mesh):渲染出来的粒子的Mesh。注意这个会和Texture Sheet Animation发生冲突。也就是说规定了粒子的mesh之后就不会有帧动画产生。