用户参数与实例化:一个资产出五种效果
数据驱动的最大红利:把"参数差异"从"资产差异"里解放出来。这一节给出一个可执行的实例化方案。
目标
一个 NS_EnemyDeath 敌人死亡特效,服务五种敌人:近战兵、远程兵、精英、Boss、机械单位。它们的死亡表现只有数值差异(颜色、规模、粒子数),不需要五个 NS。
参数清单(全部放在 System 层 User 暴露)
| 参数 | 类型 | 近战兵 | 远程兵 | 精英 | Boss | 机械 |
|---|---|---|---|---|---|---|
User.DeathColor |
Color | 红 | 紫 | 金 | 深红 + 火光 | 金属灰 + 火花 |
User.BurstCount |
int | 15 | 12 | 30 | 60 | 25 |
User.DeathScale |
float | 0.8 | 0.7 | 1.5 | 3.0 | 1.2 |
User.Force |
float | 300 | 200 | 500 | 800 | 350 |
内部如何消费参数
BurstCount:Spawn Burst 模块的 Count 绑定到它(注意 int→float 的隐式转换,部分版本要明确转一次);DeathColor:Color 初始化模块的颜色参数绑定到它;DeathScale:Sprite Size 的缩放系数与 Velocity 的大小都乘上它;Force:Add Velocity 模块的强度。
所有绑定都在 Emitter 轨道属性里完成(System 层选中 Emitter → 参数面板把模块参数 Bind 到 User.XXX)。
蓝图 / C++ 调用
// 角色死亡时
FAsyncLoad NS_EnemyDeath
Spawn System at Actor(Enemy)
Set Color Parameter "DeathColor" = 配置.颜色
Set Int Parameter "BurstCount" = 配置.数量
Set Float Parameter "DeathScale" = 配置.规模
Activate
进阶:DataTable 作为参数来源
把上表导入 DataTable(行名 = 敌人类型),死亡逻辑里按敌人类型查行,把每个字段 Unfold 到 Set Parameter 调用。这样新增一种敌人死亡 = 加一行表,程序零改动。
这条路的终点是"特效配置完全数据化":配合第 2 章的资产目录规范,特效系统的可维护性会有质的提升。
