Unity3D -- ParticleSystem 烛光制作

一、完成效果

视频地址
代码传送门
在这里插入图片描述

二、 ParticleSystem 的基本用法

1. main 面板的基本属性

在这里插入图片描述

  • Duration:发射器发送粒子持续的时间
  • Looping:是否循环发射粒子
  • Prewarm:在Looping勾选之后才能使用,翻译是预热粒子发射。
  • Start Delay:发射延迟时间,暂停x秒后开始发射粒子
  • Start Lifetime:粒子的生命周期,有Constant,Curve,Random Between Two Constants和Randow Between Two Curves四种类型可以选择
  • Start Speed:粒子被创建时具有的速度
  • Start Size:粒子被创建时具有的初始大小
  • 3D StartRotation:需要往一个方向旋转粒子时候使用
  • Start Rotation:粒子初始旋转
  • RandomizeRotation:随机旋转粒子方向
  • Start Color:初始颜色
  • Gravity Modifier:修正重力
  • Simulation Space:发射坐标,Local是默认的,也可以选择World或者Custom。选择Local,粒子属于本地粒子发射器;选择World,移动粒子发射器,已经发射的粒子不会随着发射器移动;Custom,粒子跟着指定的物体移动
  • Simulation Speed:模拟Update
  • Delta Time
  • Scaling Mode:三种选择,Local:忽略父级的缩放;Hierarchy:跟随父级缩放;Shape:跟随初始位置
  • Play On Awake:是否Awake时就播放
  • Max Particles:一个duration内最多发射的粒子数目*
  • Auto Random Seed:随机种子
  • Stop Action:是否停止使用粒子系统

2. Shape 组件

在这里插入图片描述

  • shape:发射粒子的形状
  • angle:发射粒子的角度
  • radius:发射的粒子的半径
  • radiusThickness:发射粒子的形状厚度
  • arc:发射粒子的圆弧的角度

3. ColorOverLifeTime组件

ColorOverLifeTime 可以根据生命周期改变粒子颜色,其中上面是调整颜色,下面可以调整透明度

在这里插入图片描述

4. SizeOverLifeTime组件

与上一个类似,SizeOverLifeTime 可以根据生命周期调整粒子的大小。点击上面的线段可以新建一个拐点,因此可以创造出各式各样大小变化的粒子。
在这里插入图片描述

5. Render组件

renderer主要是用于粒子效果的渲染,常用的是对其参数material进行设置。


二、 烛光的制作

首先第一步进行Renderer组件的设置,在我们的粒子上进行贴图。不先进行这一步操作的话很难根据效果调整粒子大小。
这一步只需要更改 materialtailmaterial 即可,其他的可以保留默认设置值。
这里我使用的材料是 assets store 中的 smoke 包
完成后的设置如下图

接下来在main面板中进行基础的粒子设置。我将发射器发送粒子持续的时间设置为1秒,生命周期设置为2秒,开始发射的速度为4,粒子大小为5。这些参数可以根据想要的效果自己做调整。
在这里插入图片描述
成了上一步之后对粒子的形状进行调整
首先将 angle 设置为0,因为烛光比较小,所以半径 radius 被设置为 0.3,另外,为了让烛光是向上的,需要设置 rotation.x = -90
在这里插入图片描述
完成后的火焰就已经初具效果了。但是看起来还不太真实
在这里插入图片描述
考虑到火焰是底部小,中部大,上部小的,因此设置 SizeOverLifetime,调整它的变化曲线
在这里插入图片描述
效果立竿见影
在这里插入图片描述
最后再对烛光的颜色进行调整,进入 ColorOverLifeTime
调整粒子各个阶段的颜色和透明度,使其由蓝色到橙红色,并且最后逐渐透明消失

在这里插入图片描述
完成效果
在这里插入图片描述
再加上背景图
在这里插入图片描述
最后根据需要可以增加一些效果,比如实现蜡烛在风力过大时的熄灭效果
蜡烛熄灭时,粒子的速度减慢,颜色变黑生成黑烟,并且向上飘动,所以函数中设置如下

void putOut() {
        ParticleSystem.MainModule main = particleSystem.main;
        main.loop = false;
        main.startLifetime = 2f;
        main.startSize = 2f;
        main.startSpeed = 2f;
        forceMode.x = 0;    
        Gradient grad = new Gradient();
        grad.SetKeys(new GradientColorKey[] { new GradientColorKey(Color.black, 2.0f) }, new GradientAlphaKey[] { new GradientAlphaKey(1.0f, 0.0f), new GradientAlphaKey(0.0f, 2.0f) });
        colorMode.color = grad;
}

熄灭效果

其他的效果比如烛光增强减弱,以及向两边飘动等都非常简单,可以直接到 github 上参考代码。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值