用户参数与实例化:一个资产出五种效果

数据驱动的最大红利:把"参数差异"从"资产差异"里解放出来。这一节给出一个可执行的实例化方案。

目标

一个 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 章的资产目录规范,特效系统的可维护性会有质的提升。