Emitter 内部结构:三段式管线
打开任意一个 Emitter 编辑器,左侧面板把模块分成几个组。这不是界面的随意划分,而是粒子生命周期的三个阶段,每个阶段只能做该阶段的事。
三段式的划分
| 组 | 作用 | 执行频率 | 典型模块 |
|---|---|---|---|
| Emitter Update | 管理发射器自身的状态 | 每帧一次 | 判断发射器是否结束、生成新的"爆发波次" |
| Particle Spawn | 初始化新生的粒子 | 每个粒子诞生时一次 | 初始位置 / 速度 / 生命 / 颜色 |
| Particle Update | 更新存活中的粒子 | 每帧每粒子上执行 | 力、颜色渐变、大小变化、碰撞 |
| (渲染) | 把粒子画出来 | 每帧一次提交 | Sprite / Ribbon / Mesh 渲染器 |
为什么要分这几段
一个最常见的错误是把"每帧都要做"的事写进了"只做一次"的组里。举例:某人在 Particle Spawn 里写了"把颜色设为随时间渐变的值",结果颜色永远不变——因为 Spawn 只在粒子出生时执行一次,之后再也不跑了。渐变必须放 Update。
反向的错误同样常见:把"生成时的随机初速度"写进 Update,导致每帧都重新随机一次速度,粒子原地疯狂抖动。
Emitter Update 的两个典型用法
用法一:控制发射器整体生命周期。 比如一个"间歇喷泉":Emitter Update 里放一个计数器,每累计 2 秒触发一次爆发(在 Spawn Burst 里发 50 个粒子),其余时间不发射。
用法二:波次生成。 配合 Spawn Burst 模块的次数计数,做"第一波 20 个、第二波 50 个"这种分阶段表现。
渲染器是独立配置的
渲染器(Renderer)不在三段式里,它是"数据怎么画成像素"的配置,和模拟解耦:
- 同一套粒子数据,加 Sprite 渲染器是"圆形光点",加 Ribbon 渲染器是"拖尾光带",加 Mesh 渲染器是"翻滚的碎石";
- 一个 Emitter 可以挂多个渲染器(同一批粒子既画 Sprite 又画 Ribbon)。
数据与渲染分离是 Niagara 的核心架构优势。想深入渲染器选项,可参考官方的 Niagara渲染器。
