一、完成效果
二、 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组件的设置,在我们的粒子上进行贴图。不先进行这一步操作的话很难根据效果调整粒子大小。
这一步只需要更改 material
和 tailmaterial
即可,其他的可以保留默认设置值。
这里我使用的材料是 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 上参考代码。