Unity3d-Particle System系统的学习

Posted 草帽领

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3d-Particle System系统的学习相关的知识,希望对你有一定的参考价值。

这节我们继续上节没讲完的Particle参数。

上节我们讲了Emission发射器参数,我们接着往下讲Shape:

可以看到这个子模块的参数是跟形状有关:

1.Shape:发射形状。粒子被约束在这个形状中发射。我们看看效果图就知道了。就拿这个Cone锥形来看:

可以看见粒子发射总是被约束在这个锥形中。

我们看看总共有几种形状:

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)。我具体研究了下,发现根本没啥屌用。主要还是看前面的Simulation Space的参数。所以这个参数我们暂时不管他。

我们总结下,这个组件有啥用,主要是根据不同类型粒子改变不同方向上的速度。如下雨,肯定不是直直的下着带有点倾斜的下着,所以这里改变下方向速度就可以实现。

OK,我们继续下个组件:Limit Velocity over Lifetime 限制粒子速度

这个组件其实没啥屌用,就是限制粒子发射速度。

(1.Separate Axis:是否限制3个方向的速度。当我们打钩之后,会有x,y,z三个方向的速度限制。

(2.Speed:总体限制的速度。

(3.Dampen:速度限制倍数。我发现永远为1,不懂为什么。

OK,这个组件其实就是为了防止在其他地方修改导致粒子速度过快或者过慢。

进入下个组件:Force over Lifetime 粒子在不同方向受力

这个组件其实就是改变粒子不同方向上的加速度。感觉类似于上面讲的两个组件,这里我不详细介绍。

主要应用场景很多,比如喷泉,我们在z方向施加往下的力,类似的场景很多,凡是跟重力相关的都可以用上。

 Color over Lifetime:(粒子颜色随着生命周期的改变而改变)

这个组件是用来改变粒子颜色,但是这个颜色变化是根据粒子的生命周期而变化的,如下如所示:

我在生命中期的颜色改为红色,可见粒子发射出来的时候在中间位置颜色变成红色。

Color by Speed:(粒子颜色随着速度的变化而变化)

这个组件也是用来改变粒子颜色的,只不过这次是根据粒子的实时速度来变化的。

见下图:

粒子的速度为5,

1.Color:我选择在速度范围的中间设置为红色。

2.Speed Range:速度范围。这里我选择0-10,那么粒子的速度落在了范围的中部,所以整体粒子的颜色改变为红色。

 

Ok,接下来几个组件与上面几乎一致,分别是:

1.Size over Lifetime:(粒子大小随着生命周期而变化)

2.Size by Speed(粒子大小随着速度而变化)

3.Rotation over Lifetime(粒子旋转方向随着生命周期而变化)

4.Rotation by Speed(粒子旋转方向随着速度而变化)

 

External Forces:(这个组价我一直搞不懂,但是几乎没怎么用到,先跳过等我研究透了再来写)

 

接下来:

Collision:(粒子碰撞效果)

这个组件用来处理粒子与其他碰撞器之间的碰撞检测。

1.Planes Or World(第一个参数是其他碰撞体类型,

(1-Planes)如果是Planes的话,那么规定死了,粒子只能与这些Planes,也就是面碰撞,如上图,我们可以点击+按钮添加Transform面)

(2-Visualization)可视化类型,有分Grid和Solid:

  Grid:(网格,在编辑过程中可以看见具体的碰撞器边界)

  

  Solid(实体),没有边界,但是他的实体就是边界,没啥差别。

 (3-Scale Plane)面的缩放大小,也就是碰撞器的缩放大小。

 (4-Dampen)碰撞器表面的摩擦力大小。如果大于0的话,表明粒子碰到碰撞器后速度会减少。

 (5-Bounce)弹力。默认为1,如果为0的话,表示不能反弹,那么就只能沿着碰撞器表面滑行。

 (6-Lifetime Loss)碰撞之后粒子生命周期减少。

 (7-Min Kill Speed)顾名思义。粒子碰撞后如果速度小于这个速度的粒子会销毁。

 (8-Particle Radius)粒子半径。

(1-World)如果是World的话,我们可以选择在世界坐标下所有的碰撞的layer来剔除。在参数中多了个Collides With,这里选择我们需要的layer。

其他大致参数与上述Planes一致。

 

Sub Emitters:(自粒子发射器)

分为三个阶段:

1.Birth(本粒子出生的时候,那么子粒子会跟着本粒子出生)

2.Collision(本粒子碰撞的时候,会产生子粒子)

3.Death(本粒子死亡的时候,会产生子粒子)

这里注意所谓粒子是单个粒子,不是整个Particle System。可能读者会误以为整个本体Particle死亡的时候才产生粒子,这里是个误区,其实是Particle的单个小粒子。

比如我在出生的搞个子粒子。那么每发射一个小粒子,会持续产生子粒子,注意持续。因为我没有在本体粒子Death处理任何事,也就是说本体粒子没有消亡之前,一直会产生子粒子。

 

接下来:

Texture Sheet Animation:(序列帧动画)

这个组件得配合下面的Renderer组件的材质球。因为我们的序列帧图片是从这里获取的。

这里我搞了个帧贴图材质,赋给Renderer组件里面的Material。

OK,我们看下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:(渲染组件,就是渲染粒子的材质球)

1.Renderer Mode:(渲染模式)

  (1-Billboard):渲染出来的粒子永远朝向摄像机,也就是说摄像机无论在哪个角度,他都是表现材质球的正面。

  (2-Stretched Billboard):渲染出来的粒子可以进行缩放,但是没有正面朝向摄像机。什么叫正面,就是说他原先发射的粒子什么方向就是什么方向。

  

  调整Scale来拉伸粒子,这三个参数随便改动那个都行。

  (3-Horizontal Billboard):渲染出来的粒子都是水平朝向。

  (4-Vertical Billboard):渲染出来的粒子都是竖直朝向。

  (5-Mesh):渲染出来的粒子的Mesh。注意这个会和Texture Sheet Animation发生冲突。也就是说规定了粒子的mesh之后就不会有帧动画产生。

  

Ok,剩下的你们自己去理解,看看名字其实就知道咋用。

 

下节课,我们实战下,来做个比较好看的整体粒子特效。

 

以上是关于Unity3d-Particle System系统的学习的主要内容,如果未能解决你的问题,请参考以下文章

Unity3d-Particle System系统的学习

Android 逆向Android 系统文件分析 ( /system/ 系统命令和系统应用数据目录 | /system/app/ 系统应用目录 | sys Linux 系统内核文件目录 )

Android 逆向Android 系统文件分析 ( /system/ 系统命令和系统应用数据目录 | /system/app/ 系统应用目录 | sys Linux 系统内核文件目录 )

Java系统变量信息获取方法System.getenv()与System.getProperty()

系统变量之System.getenv()和System.getProperty()

系统变量之System.getenv()和System.getProperty()