Unity粒子系统学习笔记

粒子系统

粒子系统ParticleSystem用于在Unity中模拟无形的,流动的物质,例如液体,烟雾,火焰,爆炸,魔法等。在Hierarchy层级栏中可以添加粒子系统:Effects/ParticleSystem。

ParticleSystem会自动生成一个粒子发生器,Inspector中可以看到它包含一个主模块和22个子模块。

Scene中会出现粒子预览窗口,方便调节。

默认启用了Emission/Shape/Render三个模块,它们用来控制粒子的形状,速度,颜色等等。

在这里插入图片描述

对象的橘黄色框可以打开Gizmos,关掉SelectionOutline。字体可以通过Edit/Preferences/UIScaling调整

粒子预览窗口:

在这里插入图片描述

控制粒子发生的一些参数:

PlaybackSpeed:粒子总体速度(生成速度,移动速度)

PlaybackTime:已运行时间

Particles:当前在屏幕中的粒子数

SpeedRange:粒子速度上下限

模块Module:默认启动了主模块Main,发生频率Emission,发生器形状Shape,粒子的显示Renderer

粒子的基本参数

粒子形状

粒子的形状是在Render模块当中进行定义的,修改粒子的形状,需要先得到一份粒子的贴图,在Ps中制作或从浏览器寻找,将它制作成材质:

需要材质的Shader方式为Particles/StandardSurface,RenderingMode改为Additive(叠加型渲染模式)

进入ParticleSystem,将材质拖入即可完成粒子形状的修改。

在这里插入图片描述

在这里插入图片描述

粒子的大小在主模块当中进行修改,主模块当中的StartSize可以控制粒子初始的大小,也可以点击它右边的下拉栏让它变成在两个数的区间里随机的大小:选择RandomBetweenTwoConstants。可以明显看到粒子的大小变成了随机的。如果对粒子的形状仍然不满意的话,可以勾选3DStartSize来控制粒子在每个轴向的缩放大小。可以在Renderer模块下找到Pivot,修改每个粒子的轴心位置。

在这里插入图片描述

在这里插入图片描述

另外,粒子的大小与它所使用的贴图大小是无关的,一个100像素的贴图与一个500像素的贴图绘制出来的同种粒子几乎差不多大,由此可见,StartSize规定了这个粒子的直径,而不是贴图缩放。将材质的渲染方式设置成Opaque(不透明模式),可以发现两张这两种粒子的大小一样。

粒子默认是以BillBoard模式显示的(2D渲染),类似于Terrain中的花草。BillBoard(广告牌)会让物体永远正面对准镜头。

粒子的颜色也可以在主模块中StartColor处设定,这个值可以是两个颜色之间的区间,也可以是随机色彩。

在这里插入图片描述

值得注意的是,即便在StartColor中规定了粒子为绿色,显示出来的效果也不是纯绿色,粒子与粒子,天空,红色方块叠加的地方都变成了不一样的颜色,这是因为画面的最终显示效果是由着色器调控的,我们在设置粒子材质的时候,选择的RenderingMode为Additive(叠加的),所以最终显示效果会受到粒子背后传来的光的影响从而发生变色。可以尝试选择不同的着色器选项观察变化。

粒子移动

粒子初始速度是在主模块定义的,StartSpeed就是控制这个速度的值,它也可以使用下拉栏,像规定粒子初始大小一样变成在两个数的区间里随机的速度。粒子的移动可以受到重力影响,同样在主模块中,可以使用GravityModifier规定这个粒子受到重力影响的系数(粒子无刚体,只能模拟),同样它也可以被设定成两个数的区间里随机的系数。这样可以简单的达到有些粒子曲线移动的效果。

在这里插入图片描述

在这里插入图片描述

粒子的发射方向是由Shape模块决定的,打开Shape模块就可以看到现在的粒子是以什么方式发射的,是一个倒圆锥形向上发射的形式。

在这里插入图片描述

粒子的发生

主模块中,找到PlayOnAwake,这个参数控制这个粒子系统是否在对象初始化时就开始运行。我们可以使用代码来完成这个过程

在这里插入图片描述

public class ParticleCtrl : MonoBehaviour
{
    private ParticleSystem ps;
    
    void Start()
    {
        ps = GetComponent<ParticleSystem>();
    }

    void Update()
    {
        if (Input.GetButtonDown("Fire1") && !ps.isPlaying)
        {
            ps.Play();
        }
        else if(Input.GetButtonDown("Fire1") && ps.isPlaying)
        {
            ps.Stop();
        }
    }
}

主模块中的Looping表示这个粒子是否循环播放,如果不勾选,单词运行情况下Duration表示这个粒子系统运行时长。

在这里插入图片描述

主模块中的StartLifeTime控制每个粒子的生命周期,也就是粒子发生多长时间后消失,它可以是两个数字之间的随机值。根据数学理论,当前在场的粒子数量的平均值会是这两个数字间的中位数。

Emission模块中的RateOverTime可以控制该粒子系统每秒钟发射的粒子数量(匀速),这个值也可以是两个数之间的随机值。

Emission模块中的Burst可以控制粒子爆发式产生:

Time表示第一次爆发在生命周期的第几秒开始(如果这个值大于生命周期,则全程不爆发)

Count表示每次爆发要生成多少粒子,它可以是两个数字之间的随机值

Cycles表示在整个生命周期中最多爆发多少次,Infinite表示无限次

Interval表示第一次爆发以后每次爆发的时间间隔

Probability表示本次爆发有多大概率发生,是个概率

在这里插入图片描述

主模块中的MaxParticles可以控制该粒子系统承受的最大粒子数量,粒子超过这个数量后,不会销毁先出现的粒子,而是停止发生更多新粒子

主模块中的SimulationSpace模拟粒子在生成后跟随哪个坐标系移动:

Local:粒子生成后跟随粒子发生器坐标的移动而移动,这个模式下,粒子发生器的移动会表现在每个粒子上。

World:粒子生成后不跟随粒子发生器,直接在世界坐标系中移动。

在这里插入图片描述

粒子发生器的形状

粒子不可以只能向上发射,关于粒子发射的方向,坐标之类的设置是粒子发生器操控的,Shape模块控制了粒子发生器的形状,选中粒子系统,边缘

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值