脚本基础: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 打开草稿模式。草稿里的改动不会写回资产,可以随便折腾,调好了再"提交"回正式模块。这是"所见即所得"思想的安全网。