Unity的粒子系统(一)基础篇

Posted

tags:

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

参考技术A 闲来无事,仔细的学习一下粒子系统,也当是给自己做个笔记方便之后进行回顾。

引擎版本:Unity2018.3

创建方式:

1、Hierarchy-->Effects-->ParticleSystem

2、gameObject-->AddComponent-->ParticleSystem

两种创建的方式的区别只有是否有默认材质球的区别,即是否携带初始材质。

1、OpenEditor:打开粒子编辑面板,同一父物体下的粒子系统会按照从上到下的关系从左到右排序。

2、基础模块:ParticleSystem下的物件名(图片中的ParticleSystem),可以进行粒子运动的参数进行基础的设置。

3、Emission:发射模块,控制粒子的单次发射数(时间或者移动距离),以及可控的粒子发射时间。

4、Shape:形状模块(发射器的形状),控制修改发射器的形状和相应的参数。

5、Velocity over Lifetime:粒子生命周期内的速度变化模块,在粒子生命周期内的对速度进行控制。(可以在粒子还没销毁前控制其速度的变化)。

6、Limit Velocity over Lifetime:粒子生命周期内的限速模块,控制粒子的最大速度。

7、Inherit Velocity:粒子速度继承模块,控制粒子是否继承父物体的移动参数(需要改变基础模块中Simulation Space的参数为World)。

8、Force over Lifetime:生命周期内粒子力的变化模块,在粒子生命周期内对力进行控制。

9、Color over Lifetime:生命周期内粒子颜色的变化模块,控制粒子生命周期内颜色的变化。

10、Color by Speed:根据粒子速度改变粒子颜色模块,通过粒子的速度控制粒子的颜色。

11、Size over LifeTime:生命周期内粒子大小的变化模块,控制粒子生命周期内粒子大小的变化。

12、Size by Speed:根据粒子速度改变粒子大小模块,通过粒子速度改变粒子的大小。

13、Rotation over Lifetime:生命周期内粒子旋转属性的变化模块,控制粒子生命周期内粒子旋转属性的变化。

14、Rotation by Speed:根据粒子速度改变粒子速度模块,通过粒子速度改变粒子的旋转。

15、External Forces:外力模块,当粒子碰到相关联物体给粒子增加一个力。

16、Noise:噪音模块,可以对粒子进行不规则的运动设置。

17、Collision:碰撞体模块,可以控制粒子与指定物体之间的碰撞,以及碰撞后的粒子效果。

18、Triggers:触发器模块,控制粒子进出指定触发器后的粒子效果。

19、Sub Emitters:添加发射器模块,给该发射器增加其他的发射器。

20、Texture Sheet Animation:粒子帧动画模块,使粒子呈现帧动画形式的播放。

21、Lights:粒子灯光模块,可以给粒子增加实时光照。

22、Trails:路径模块,可以显示粒子的发射路径。

23、Custom Data:自定义模块,可以自定义粒子的一些属性。

24、Renderer:渲染模块,对粒子的展现形式进行设置,包括但不仅限于粒子的大小与材质。

Particle System Force Field(粒子系统的力场组件),其作用是对所关联的粒子系统施加外力,要使用这个组件,需要开启粒子系统中的External Forces(外力模块)并进行关联。

1、shape:形状,力场的表现样式。

2、Start Range:开始的范围(无法大于End Range)。

3、End Range:结束的范围,数值越大力场越大。力场介于Start Range 至End Range之间。

4、Direction(x,y,z):x,y,z方向上力的大小。

5、Gravity

5.1、Strength(Gravity):强度,可以想象成地球的引力,数值越大,越容易被焦点(引力点)吸引。

5.2、Focus(Gravity):焦点,控制引力点对粒子是吸引还是排斥。

6、Rotation

6.1、Rotation(Speed):粒子围绕力场中心运动的速度。

6.2、Rotation(Attraction):粒子被卷入中心点的强度。

6.3、Rotation(Randomness):对粒子产生随机性的推动。

7、Drag

7.1、Strength(Drag):拽住粒子的强度,类似你上楼梯后面有人拉你的衣角不让你上去的感觉。

7.2、Multiply by size(Drag):根据粒子大小调节拖拽强度。

7.3、Multiply by Velocity(Drag):根据粒子速度调节拖拽强度。

8、Vector Field

8.1、Volume Texture(Vector Field):向量场的纹理贴图(Texture 3D)。

8.2、Speed(Vector Field):改变通过向量场的粒子的速度。

8.3、Attraction(Vector Field):向量场的吸引力强度。

在ParticleSystem与Particle System Force Field中最常见的数值设置有三种,在下面给出

第一种:权重,范围为0-1,例如Attraction的范围等。

第二种:固定参数,固定一个参数,例如粒子发射器的持续时间。

第三种:参数曲线,这种数值设置是粒子系统可以千变万化的根源所在,通过对曲线的调变可以变化出各式各样的粒子效果。

我们着重来讲第三种数值设置(参数曲线)。参数曲线方便了我们想要粒子在什么时间段进行什么样的颜色变化或者效果变化。

1、Color:纯色显示。

2、Gradient:颜色按照梯度进行显示(举例,越迟生成的粒子颜色越接近右端)。

3、Random Between Two Colors:粒子颜色在两个纯色中任选一个。

4、Random Between Two Gradients:粒子颜色在两个梯度中任意选择一个显示。

5、Random Color:在你定义的色谱上任意选择一个颜色作为粒子颜色。

1、Constant:常量。

2、Curve:单条曲线,多了时间的属性,可以根据时间进行变化。可以自行拖拽改变曲线形状获得想要的粒子效果

3、Random Between Two Constant:在两个常量间随机一个数值。

4、Random Between Two Curve:跟随着时间,粒子某个属性值为两条曲线围成的区间的该时间点上的随机值。(粒子效果很大的一部分都需要在数值曲线中进行调节)

按照笔者自己的分类习惯,将ParticleSystem的23个功能模块分类为以下六个类别

(一)最基础模块

1、基础模块:ParticleSystem下的物件名(图片中的ParticleSystem)。

2、Renderer:渲染模块。

(二) 发射器模块

1、Emission:发射模块。

2、Shape:形状模块(发射器的形状)。

3、Sub Emitters:添加发射器模块。

(三)粒子生命周期特效控制模块

1、Velocity over Lifetime:粒子生命周期内的速度变化模块。

2、Limit Velocity over Lifetime:粒子生命周期内的限速模块。

3、Force over Lifetime:生命周期内粒子力的变化模块。

4、Color over Lifetime:生命周期内粒子颜色的变化模块。

5、Size over LifeTime:生命周期内粒子大小的变化模块。

6、Rotation over Lifetime:生命周期内粒子旋转属性的变化模块。

(四)粒子自身特效控制模块

1、Color by Speed:根据粒子速度改变粒子颜色模块。

2、Size by Speed:根据粒子速度改变粒子大小模块。

3、Rotation by Speed:根据粒子速度改变粒子速度模块。

4、Texture Sheet Animation:粒子帧动画模块。

5、Trails:路径模块。

6、Noise:噪音模块。

(五)粒子与外界交互的特效控制模块

1、Inherit Velocity:粒子速度继承模块。

2、External Forces:外力模块。(Particle System Force Field组件属于这一块)

3、Collision:碰撞体模块。

4、Triggers:触发器模块。

5、Lights:粒子灯光模块。

(六)自定义模块

Custom Data:自定义模块。

说明:关于over LifeTime模块与by Speed模块的区别

over LifeTime模块:类似花开花落的一生。

by Speed模块:类似跑龙套,当你满足条件则执行。

详解Unity中的粒子系统Particle System

前言

上一篇我们详细讲解了有关主模块的全部内容,已经对粒子系统的基本运作有了足够的了解,本篇就来讲一下被粒子系统默认启用的Emission、Shape、Renderer模块又在粒子系统中扮演着怎么样的作用吧。

目录

本系列提要

Unity粒子系统专题博客共分成十二篇来讲解: 【本篇为第三篇】

前排提醒:本文仅代表个人观点,以供交流学习,若有不同意见请评论留言,笔者一定好好学习,天天向上。

Unity版本[2019.4.10f1] 梦小天幼 & 禁止转载

视频讲解:
【详解Unity】粒子系统(三) | Particle System | Emission、Shape模块讲解 | 哔哩哔哩


一、Emission模块

该模块主要用于控制粒子每秒的发射数量、波次、间隔等。

1.Rate over Time & Rate over Distance

Rate over Time:每个时间单位发射的粒子数量(秒)
Rate over Distance:每个移动距离单位发射的粒子数量(米)

第一个很容易理解,每秒钟发射多少粒子;第二个参数是每个移动距离单位发射的粒子数量,举个例子:假如该值设为3,把粒子比作汽车,汽车向前移动10米,那么就向外发射30个粒子,也就是每移动一米,就发射3颗粒子。

这两个值不相互冲突,假如10秒内汽车(粒子系统)移动了20米,那么就要发射(10×参数1) + (20×参数2)个粒子数,也就是各自计算各自所发射的粒子数

2.Bursts

该参数主要用于粒子爆发的参数设置、比如爆炸、或间歇性的粒子喷射之类的效果
注:该参数和上述两个参数依旧相互不冲突,各管各的

下面是演示效果以及参数设置

  • 该粒子每波发射30个,波次间隔1秒,无限发射

参数描述
Time设置发射爆发粒子的时间
Count设置发射的粒子数
Cycles设置发射波次,可自定义波次,也可选择无限波次
Interval设置每个爆发周期的间隔时间
Probability设置每个爆发周期生成粒子的可能性

解释Probability: 如果Count设置为30.该值设置1,那么每波必定发射30个粒子,如果设置为0,那么不会产生一个粒子。具体也不是相乘的关系,而是一个随机的设置,只能说越接近1也就越接近Count设置的值。


二、Shape模块

模块概述

该模块用于定义粒子的发射体积的形状,以及发射的方向。

该模块我们分成3个部分来说明,上图我用线段做了区分,分成了3个参数部分。
第一部分是定义发射体积相关的;第二部分是图形遮罩相关的;第三部分是位置旋转缩放与方向相关的

注意:粒子系统内置了许多不一样的体积,比如圆球、半圆、圆环、锥体等,这些体积的设置方式也不相同,但主要是第一部分的参数不一样,第二部分和第三部分都是相同的,所以第一部分分开讲述。

第一部分

第一个Shape参数,可以选择Unity内置的多种体积

1.主要有Sphere(球体)、Hemisphere(半球)、Cone(锥体)、Donut(圆环体)、Box(正方体)这些预设体积发射器
2.还有Mesh\\Mesh Renderer\\Skinned Mesh Renderer、Sprite\\Sprite Renderer这些依据网格或精灵图来作为发射器的预设选项
3.以及Circle(圆圈)、Edge(边)、Rectangle(矩形)这些2D发射器

1.Sphere&Hemisphere

球体与半球参数一致,放一起讲解
<


">

参数描述
Radius球体或半球的半径
Radius Thickness球体或半球的内壁半径,1实心,0空心
Arc设置球体的弧度,默认360是一个球体,如果设置为180,就成了半球了(该属性如果不明白,一定要上手调节一下,瞬间就懂了)
Arc - Mode产生粒子的顺序模式,Random随机、Loop循环、Ping-Pong循环折返、Burst Spread模式(此模式若有不解,请看小标题5.Mesh的演示)
Arc - Spread只在弧线特定角度产生粒子,0则禁用

2.Cone

锥体

参数描述
Angle锥体顶部开合角度,0-90范围
Radius球体或半球的半径
Radius Thickness内壁半径,1实心,0空心
Arc设置锥体的弧度
Arc - Mode产生粒子的顺序模式,Random随机、Loop循环、Ping-Pong循环折返、Burst Spread
Arc - Spread只在弧线特定角度产生粒子,0则禁用
Emit from从哪里开始发射粒子 Base从底部开始、Volume从体积开始
Length锥体长度,当Emit from设置为Volume时生效

3.Donut

圆环体

参数描述
Radius球体或半球的半径
Donut Radius外圆环的粗细程度
Radius Thickness内壁半径,1实心,0空心
Arc设置弧度
Arc - Mode产生粒子的顺序模式,Random随机、Loop循环、Ping-Pong循环折返、Burst Spread
Arc - Spread只在弧线特定角度产生粒子,0则禁用

4.Box

正方体

参数描述
Emit from从哪里开始发射粒子 Volume 从体积发射、Shell 从外边缘发射、Edge从边缘发射
Box Thickness当设置为Shell或Edge时,控制体积厚度,从0到1

5.Mesh

网格发射器

参数描述
Type指定从何处发射粒子,Vertex顶点处、Edge边缘处、Triangle三角面
Type - Mode产生粒子的顺序模式(下有动态图演示)
Mesh网格来源
Single Material指定是否从特定子网格(由材质索引号标识)发射粒子
Use Mesh Colors使用网格顶点颜色调整粒子颜色,或者,如果顶点颜色不存在,则使用材质中的着色器颜色属性“Color“或”TintColor”
Normal Offset在距离网格表面多远处发射粒子(在表面法线的方向上)

关于Type - Mode顺序模式的动态演示,随机模式、循环模式、循环折返模式

往后的发射器就大同小异了,没必要单独讲解了,后面直接开始第二部分参数的讲解

第二部分

这一部分的参数主要用于设置纹理对粒子的影响,比如通过纹理贴图的颜色信息来影响粒子的发射,粒子本身的颜色等等

参数描述
Texture在发射粒子形状表面贴上图片纹理,相当于套层壳,如果这里没有设置值,就不会出现下列的属性。
Clip Channel裁剪通道,有RGBA四个通道,可以选择用哪个通道来操作
Clip Threshold裁剪阈值,取值0-1,0代表全通过
Color affects Particles粒子受到纹理颜色影响而改变颜色
Alpha affects Particles粒子受到纹理透明度的影响而改变透明度
Bilinear Filtering双线过滤,对像素比较少的纹理进行优化

注意 :如果不理解这一系列操作,请允许我类比一个小栗子就理解了。

我们假设粒子形状现在是一个锥桶,粒子要从桶底生成,这个纹理贴图就是一块五颜六色的湿抹布,紧紧的、刚刚好的、中肯的、合理的贴在了桶底上,严丝合缝,滴水不漏。

Color affects Particles属性用于,哪一滴水(粒子)通过了湿抹布的哪一个位置,这滴水就要被湿抹布上面的颜色所沾染,从而变色。

Alpha affects Particles属性同理,只不过变化的是透明度。

Clip Channel属性则是和Clip Threshold密切相关的,我们假设湿抹布只有三种颜色,红绿蓝,对应RGB,如果我们选择R,也就是红色,那么只有红色的水滴(预先设置为红色的粒子)才能通过湿抹布,而通过的概率,也就是阈值,就是由Clip Threshold来设置的。

如果还不理解,那就去看我粒子系统相关的视频教程吧,会讲的更加详细。

第三部分

好啦,第三部分就比较简单了,用于设置粒子发射器的位置,可以说是和Transform拥有着同样的功能。

这里的pos\\rot\\scl是和transform完全相同的,唯一有区别的就在于,如果你的主模块的Scaling Mode属性设置为了Local,那么通过Transform组件来缩放粒子系统会导致粒子本身被缩放,如果用Shape模块内的Scale属性就完全不会出现这种情况。或者说把Scaling Mode属性设置为Shape也行。所以是通过transform组件还是通过Shape模块来调整当前粒子系统的位置大小旋转,就看自己的心情了,需注意,两个不要一起调节,会乱套。

参数描述
Align To Direction根据初始行进方向定向粒子,也就是粒子固定朝着初始方向行进。无干扰情况下。
Randomize Direction将粒子方向随机朝向某处,设置为0,无效,为1,粒子方向完全随机
Spherize Direction将粒子方向朝球面方向混合,从它们的变换中心向外行进。设置为 0 时,此设置不起作用。设置为 1 时,粒子方向从中心向外(与 Shape 设置为 Sphere 时的行为相同)
Randomize Position距离原有发射点的位置进行随机化,0无效,1完全生效

最后还有四个按钮,可视化操纵用的,和Scene窗口上面的工具栏按钮一模一样,但有意思的是,通过这四个按钮操作的数据,是修改的Shape模块中的pos,rot,scl属性。


二、总结和参考资料

1.总结

无总结

2.参考资料

[1].Unity官方.官方手册-粒子系统模块-Emission模块
[2].Unity官方.官方手册-粒子系统模块-Shape模块
[3].Calabash_Boy.Unity的粒子系统(二)

以上是关于Unity的粒子系统(一)基础篇的主要内容,如果未能解决你的问题,请参考以下文章

详解Unity中的粒子系统Particle System

Unity的粒子系统(一)

unity|火焰和烟效果(粒子系统)

Unity的粒子系统(二)

Unity粒子系统

Unity使用ParticleSystem粒子系统模拟药水在血管中流动(粒子碰撞)