Appearance
粒子系统
一句话理解
Unity 的粒子系统就是:用大量“小图片或小 Mesh”一起运动,制造火焰、烟雾、爆炸、雨雪、魔法、命中反馈这类动态效果。
Unity 里主要有两条路线:
c
Particle System:内置组件,新手和大多数常规特效首选
Visual Effect Graph:节点式 GPU 特效,适合大量粒子和高级视觉1. Particle System 是什么
官方文档说,Particle System 会生成并动画化大量小的 2D 图像或 Mesh,用来模拟火、云、液体等效果。
创建方式:
GameObject > Effects > Particle System它的核心结构是:
c
Emitter:发射器,决定粒子从哪里出生
Particles:粒子本身
Modules:模块,决定粒子的生命周期、速度、颜色、大小、碰撞等
Renderer:渲染器,决定粒子最终怎么画出来
Material:材质,决定火焰、烟雾、闪光的视觉质感2. 最常用模块
先掌握这些就够你做大部分初级特效:
c
Main:生命周期、速度、大小、颜色、循环
Emission:每秒发多少粒子,是否 Burst 爆发
Shape:从点、球、圆锥、盒子、圆环等形状发射
Velocity over Lifetime:粒子出生后怎么移动
Color over Lifetime:随时间变色或淡出
Size over Lifetime:随时间变大或变小
Noise:随机扰动,做烟雾、魔法很常用
Collision:粒子碰到地面/墙
Trails:拖尾
Sub Emitters:粒子死亡或碰撞时再生成新特效
Renderer:材质、排序、Billboard、Mesh 渲染3. 一个火焰特效怎么想
火焰不是一个东西,而是一组设置:
c
Shape:小圆锥,向上发射
Start Lifetime:短一点
Start Speed:向上
Start Color:黄橙红
Color over Lifetime:橙 -> 红 -> 透明
Size over Lifetime:先变大,再消失
Noise:轻微晃动
Renderer:Additive 或透明材质你做特效时要问自己:
c
它从哪里出生?
出生多少?
活多久?
往哪里动?
颜色怎么变?
大小怎么变?
消失时要不要生成别的东西?4. 一次性爆炸怎么做
爆炸通常不是持续发射,而是 Burst:
c
Emission:Rate over Time = 0
Bursts:瞬间发射 30 到 100 个
Lifetime:0.3 到 1 秒
Start Speed:较高
Size over Lifetime:快速变大再消失
Color over Lifetime:亮黄 -> 橙红 -> 透明
Sub Emitters:死亡时生成烟雾5. 代码控制
播放和停止:
c
using UnityEngine;
public class ParticleExample : MonoBehaviour
{
public ParticleSystem effect;
public void PlayEffect()
{
effect.Play();
}
public void StopEffect()
{
effect.Stop();
}
}命中特效常见写法:
c
using UnityEngine;
public class HitEffectSpawner : MonoBehaviour
{
public ParticleSystem hitEffectPrefab;
public void SpawnHitEffect(Vector3 position)
{
ParticleSystem effect = Instantiate(
hitEffectPrefab,
position,
Quaternion.identity
);
Destroy(effect.gameObject, 2f);
}
}项目做大后,频繁特效建议用对象池,不要一直 Instantiate / Destroy。
6. Visual Effect Graph 是什么
VFX Graph 是更高级的节点式特效系统。官方文档说明它使用 Scriptable Render Pipeline 渲染,并用 Compute Shader 模拟效果。
适合:
c
大量 GPU 粒子
高级魔法效果
能量场
星云
复杂烟雾
高端角色技能
HDRP/URP 项目里的高级视觉新手顺序建议:
c
先学 Particle System
再学 Shader / Material
最后学 VFX Graph7. 性能重点
粒子特效最容易贵在这些地方:
c
透明粒子太大,Overdraw 高
Max Particles 太多
Emission 发射率太高
Collision 开太多
Lights 模块开太多
Trails 太多
Sub Emitters 连锁生成太多
频繁 Instantiate / Destroy优化口诀:
c
少一点粒子
小一点透明面积
短一点生命周期
少一点实时灯光
常用特效做对象池8. 常见坑
c
粒子不显示:Renderer 没材质,或材质不适合当前渲染管线
粒子方向不对:Shape 或 Transform 朝向错
爆炸一直喷:Emission 没关 Rate over Time
烟雾太假:没有 Noise、Color over Lifetime、Size over Lifetime
特效被挡住:Sorting Layer / Order 或 Render Queue 问题
粒子太亮或太黑:材质混合模式不合适
特效播放完还留在场景里:没有销毁或回收记住这句:
c
粒子是小图,发射器负责生,模块负责变化,Renderer 和材质负责好不好看。参考:Unity 官方 Particle effects、Particle System component、Particle System modules、Main module、Visual Effect Graph。