蓝图层:技能表现与配置
C++ 骨架搭好后,加一个新技能全过程不超过 5 分钟。以"火球术"为例:
第 1 步:新建数据资产
内容浏览器右键 → Miscellaneous → Data Asset → 选 SkillAsset → 命名 SA_Fireball:
- Cooldown: 3.0
- ManaCost: 15
- BaseDamage: 35
- SkillVisualClass: BP_Skill_Fireball(软引用)
第 2 步:做表现蓝图
新建 BP_Skill_Fireball,父类是 C++ 的 ASkillVisualBase。连两个事件:
Event OnCastStart
→ Play Montage(前摇动画,带 Notify)
Event OnCastHit(Anim Notify 触发)
→ Spawn Niagara(NS_Fireball_Hit,挂在武器插槽)
→ Play Sound(Fire_Explosion)
→ 调用组件的 ApplySkillDamage() ← C++ 结算
Event OnCastEnd
→ 销毁自己 / 播后摇
第 3 步:装备
角色蓝图的 SkillComponent 的 EquippedSkills 数组里加入 SA_Fireball。完事——没有一行 C++ 代码是新写的。
这套结构的红利
| 改动需求 | 谁来做 | 需要程序参与吗 |
|---|---|---|
| 火球伤害 35 → 50 | 策划改 SA_Fireball | 否 |
| 火球特效换个颜色 | 美术换 Niagara | 否 |
| 火球前摇快 0.2s | 美术改蒙太奇 | 否 |
| 加一个新技能"冰锥" | 策划+美术(各建一个资产+蓝图) | 否 |
| 冷却支持"减 CD 属性" | 程序改 SkillComponent | 是(一处,全局生效) |
一个例外:纯弹道技能
"火球要飞行、命中才炸"这种需要移动与碰撞的,更适合做成 ProjectileMovementComponent + Sphere Collision 的 Actor(表现蓝图里挂在基类下)。飞行与命中判定交给引擎的移动组件(第 4 章的 Tick 替代),别自己在 Tick 里写移动。
蓝图层要注意的三条纪律
- 不在蓝图里写伤害数字(数值只在数据资产里);
- 不在蓝图里做伤害结算(结算走 C++ 的 IDamageable 接口);
- 蓝图只做"播什么"(蒙太奇、特效、音效、插各自的组件)。
本章小结
- 加新技能 = 建数据资产 + 建表现蓝图 + 装备,全程不动 C++。
- 需求改动被路由到正确的角色:数值→策划、表现→美术、框架→程序。
- 弹道类用 ProjectileMovementComponent,别自己 Tick 写移动。
