脚本基础:Graph 节点与 HLSL 双模式
新建一个脚本模块(Module Script,NM_ 资产),打开编辑器后只有空白的输出参数。写逻辑有两种模式可以切换(工具栏上的切换按钮)。
两种模式
| 模式 | 优点 | 适合 |
|---|---|---|
| Graph(节点) | 直观、与蓝图习惯一致、支持中文注释 | 简单逻辑、初学者、美术也能看懂 |
| HLSL(文本) | 表达力强、性能好(少很多中间逻辑) | 复杂数学、热点优化 |
两者可以互转:Graph 可以一键"翻译"成 HLSL(转过去是优化后的代码),但 HLSL 不能转回 Graph。推荐工作流:先用 Graph 写对,性能不够再翻成 HLSL。
一个最小例子:自定义"缩放呼吸"模块
需求:让粒子大小随时间做正弦呼吸。Graph 写法:
输入:NormalizedAge(0~1 的生命进度)
sin(NormalizedAge × 2π × User.Freq) × User.Amp + 1
输出:SpriteSize 缩放系数
| 步骤 | 操作 |
|---|---|
| 1 | 脚本编辑器里点 + 添加输出参数 ScaleFactor(float) |
| 2 | 右键加入 NormalizedAge 的输入(拖入引擎参数) |
| 3 | 连一个 Sine 节点,输入是 NormalizedAge × 2π × User.Freq |
| 4 | 加 1 后接到输出 |
| 5 | 保存为 NM_Breathing,拖进任何 Emitter 的 Update 段 |
模块的三段归属
脚本模块写好后要放到正确的段(Spawn / Update / Emitter Update)。看它执行频率需求:
- 只算一次(初始速度、初始颜色)→ Spawn;
- 每帧都要变(呼吸缩放、持续追踪)→ Update;
- 管发射器自己的事(计数、波次)→ Emitter Update。
放错段是脚本模块调试时最先怀疑的问题——"为什么不动"九成是因为放进了 Spawn。
Scratch Pad:不污染资产的草稿
想快速试验一段逻辑,用 Edit → Scratch Pad 打开草稿模式。草稿里的改动不会写回资产,可以随便折腾,调好了再"提交"回正式模块。这是"所见即所得"思想的安全网。
