一、完成效果

视频地址代码传送门

unity粒子灯光闪烁 unity怎么让粒子发光_缩放

二、 ParticleSystem 的基本用法

1. main 面板的基本属性

unity粒子灯光闪烁 unity怎么让粒子发光_缩放_02

  • 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 组件

unity粒子灯光闪烁 unity怎么让粒子发光_缩放_03

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

3. ColorOverLifeTime组件

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

unity粒子灯光闪烁 unity怎么让粒子发光_生命周期_04


4. SizeOverLifeTime组件

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

unity粒子灯光闪烁 unity怎么让粒子发光_生命周期_05


5. Render组件

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



二、 烛光的制作

首先第一步进行Renderer组件的设置,在我们的粒子上进行贴图。不先进行这一步操作的话很难根据效果调整粒子大小。

这一步只需要更改 materialtailmaterial 即可,其他的可以保留默认设置值。

这里我使用的材料是 assets store 中的 smoke 包

完成后的设置如下图

unity粒子灯光闪烁 unity怎么让粒子发光_缩放_06


接下来在main面板中进行基础的粒子设置。我将发射器发送粒子持续的时间设置为1秒,生命周期设置为2秒,开始发射的速度为4,粒子大小为5。这些参数可以根据想要的效果自己做调整。

unity粒子灯光闪烁 unity怎么让粒子发光_生命周期_07


成了上一步之后对粒子的形状进行调整

首先将 angle 设置为0,因为烛光比较小,所以半径 radius 被设置为 0.3,另外,为了让烛光是向上的,需要设置 rotation.x = -90

unity粒子灯光闪烁 unity怎么让粒子发光_生命周期_08


完成后的火焰就已经初具效果了。但是看起来还不太真实

unity粒子灯光闪烁 unity怎么让粒子发光_unity粒子灯光闪烁_09


考虑到火焰是底部小,中部大,上部小的,因此设置 SizeOverLifetime,调整它的变化曲线

unity粒子灯光闪烁 unity怎么让粒子发光_生命周期_10


效果立竿见影

unity粒子灯光闪烁 unity怎么让粒子发光_unity粒子灯光闪烁_11


最后再对烛光的颜色进行调整,进入 ColorOverLifeTime

调整粒子各个阶段的颜色和透明度,使其由蓝色到橙红色,并且最后逐渐透明消失

unity粒子灯光闪烁 unity怎么让粒子发光_生命周期_04


完成效果

unity粒子灯光闪烁 unity怎么让粒子发光_github_13


再加上背景图

unity粒子灯光闪烁 unity怎么让粒子发光_生命周期_14


最后根据需要可以增加一些效果,比如实现蜡烛在风力过大时的熄灭效果

蜡烛熄灭时,粒子的速度减慢,颜色变黑生成黑烟,并且向上飘动,所以函数中设置如下

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;
}

熄灭效果

unity粒子灯光闪烁 unity怎么让粒子发光_github_15


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