【AI笔记】【UE5】小巧的伤害系统设计笔记
【AI笔记】【UE5】小巧的伤害系统设计笔记
一、 系统概述
伤害系统是游戏玩法的核心骨架——它是一个 Actor 身上的**”血条字典”(组件)外加一张“通用信用卡”**(接口),让攻击方不管面对的是玩家、敌人还是可破坏物,都能用同一套语言对话。
核心设计理念:Component 管数据 + Interface 管通信。
- Component:统一管理生命值数据,保证”什么是血、怎么扣血”在所有实体上是一致的
- Interface:对外提供统一的行为契约,保证”任何能攻击的东西”不需要区分目标类型
二、 核心组件:伤害组件 (DamageComponent)
伤害组件是整个系统的数据和逻辑中枢,所有血量计算都在这里完成。
| 属性/函数 | 核心机制 | 设计用途 |
|---|---|---|
| CurrentHealth | 当前生命值 | 实时血量,受击时扣减;可绑定 UI 血条 |
| MaxHealth | 生命值上限 | 用于血量比例计算(血条百分比)、治疗上限钳制 |
| GetCurrentHealth() | 返回当前生命值 | 供 UI 绑定、AI 决策(如低于阈值逃跑) |
| GetMaxHealth() | 返回生命值上限 | 供 UI 显示、伤害比例计算 |
| TakeDamage(float Damage) | 扣血 + 钳制到 [0, MaxHealth] + ≤0 触发死亡标记 |
所有伤害的最终落点 |
| Heal(float HealAmount) | 回血 + 钳制到 MaxHealth |
所有治疗的最终落点 |
💡 设计原则:Component 只做纯数据计算,不碰表现层逻辑。
比如:Component 知道”血扣到0了”,但不负责决定角色是播放死亡动画还是直接消失——那是每个实体自己的事。
三、 可被伤害接口 (DamageableInterface)
接口是外部系统和被伤害实体之间的通信契约——攻击方只需要问一句”你能挨打吗?”,无需知道对方是敌是友、是人是物。
1. 接口定义
| 函数 | 职责定位 | 与 Component 的关系 |
|---|---|---|
| TakeDamage(float Damage) | 伤害入口,供攻击方调用 | 🔄 内部转发到 Component 的 TakeDamage() |
| Heal(float HealAmount) | 治疗入口,供治疗逻辑调用 | 🔄 内部转发到 Component 的 Heal() |
💡 设计价值:把”调用伤害”和”伤害目标是什么”解耦。
- 武器系统不需要知道目标是玩家还是敌人——只要目标实现了这个接口,就能造成伤害
- 新增一个可被伤害的实体类型(如可破坏木箱),无需改动任何攻击方代码
四、 接口实现层:不同实体的差异化设计
同一个 Component,同一个接口,不同的 Actor 可以插入不同的自定义逻辑。这是伤害系统设计中最灵活的一层。
伤害处理流程
1 | 【外部攻击】 → 接口函数 → 【自定义逻辑前】 → Component 计算 → 【自定义逻辑后】 |
各实体类型差异化示例
| 实体类型 | 伤害输入前 | 伤害输入后 |
|---|---|---|
| 玩家角色 | 无敌帧拦截、护盾吸收 | 受击UI闪红、伤害飘字、手柄震动 |
| 普通敌人 | 护甲减伤、属性克制修正 | 受击动画、仇恨值累加、血条更新 |
| Boss | 阶段锁血、部位破坏判定 | 阶段切换演出、弱点暴露提示 |
| 可破坏物 | 伤害类型过滤(如只接受爆炸伤害) | 碎裂特效、掉落物生成 |
💡 核心价值:接口给了你一个**”插槽”**,每个实体可以在同一个插槽上插不同的行为。设计新实体时,核心血量逻辑不用重写,只需设计前后自定义行为即可。
五、 设计拓展思路
基于这套 Component + Interface 架构,可以在不破坏现有结构的前提下,轻松拓展以下战斗系统:
| 拓展方向 | 设计思路 | 依赖的现有结构 |
|---|---|---|
| 伤害类型系统 | 在 TakeDamage 中增加伤害类型参数(物理/魔法/火焰等),由 Component 统一计算抗性减免 |
Component 的 TakeDamage |
| 护盾/Armor 系统 | 在接口实现层中,调用 Component 之前先做护盾吸收逻辑 | 接口实现层的”自定义逻辑前”插槽 |
| 受击反应系统 | 在接口实现层中,调用 Component 之后根据伤害大小触发不同受击表现(轻受击/重受击/击飞) | 接口实现层的”自定义逻辑后”插槽 |
| 击杀/仇恨系统 | 在接口实现层中,记录最后一次攻击者,供 AI 仇恨和击杀统计使用 | 接口实现层 |
| 伤害来源反馈 | 传递攻击方信息(谁打的、用什么打的),供 UI 提示、仇恨系统、成就统计 | 伤害入口参数扩展 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 橙菌!



