一、战斗系统:MOBA 的"心脏"
"小陈,前面学的都是'基础'。现在进入 MOBA 真正的核心——战斗系统(Combat System)。"老周说,"王者荣耀好玩,玩的就是战斗:技能、伤害、暴击、控制、Buff。这一章,我们把'云间对决'的战斗系统搭起来。"
战斗系统的组成:
① 属性系统:英雄的数值(血量/攻击/防御/移速/暴击)
② 技能系统:技能的触发、效果、冷却
③ 伤害系统:怎么计算掉多少血(攻击 vs 防御)
④ 状态系统:Buff/Debuff(减速、眩晕、回血、中毒)
⑤ 血条系统:生命值显示与变化
"战斗系统是'规则集合'——它定义了'打一下掉多少血''技能怎么算'这些核心规则。MOBA 的乐趣,一半来自战斗系统的数值设计。"
二、属性系统:英雄的"底子"
"先定义英雄的属性——还记得第五章的'数据驱动'吗?数值放配置里。"老周打开配置文件:
{
"hero": {
"id": "yunjian_sword",
"name": "云间剑客",
"base_hp": 850,
"base_attack": 120,
"base_defense": 60,
"move_speed": 3.5,
"attack_range": 1.5,
"crit_rate": 0.2,
"attack_speed": 1.2,
"skills": [
{"id": "s1", "name": "云斩", "cooldown": 6, "damage": 180},
{"id": "s2", "name": "剑影", "cooldown": 10, "damage": 260},
{"id": "s3", "name": "破军", "cooldown": 30, "damage": 500}
]
}
}
属性系统要点:
基础属性:HP/攻击/防御/移速(每个英雄不同)
成长属性:升级后属性增长(等级越高越强)
修正属性:装备/符文/Buff 临时增减
→ 实际值 = 基础值 + 成长值 + 修正值
设计原则:
数值不是随便拍的,要"平衡"
英雄甲攻击高 → 血量低(有得有失)
用数据表格管理,反复调优(平衡测试)
"属性是战斗的'原料'——所有伤害、生存、移速都从属性来。MOBA 一百多个英雄,本质是'属性的差异化组合 + 技能差异'。"
三、伤害计算:攻击和防御怎么"咬合"
"核心问题来了:打一下,掉多少血?"老周写公式:
伤害计算(简化版,MOBA 通用思路):
物理伤害 = 攻击力 × 技能倍率 - 目标防御 × 减伤系数
魔法伤害 = 法术强度 × 技能倍率 - 目标魔抗 × 减伤系数
示例:
云间剑客攻击 = 120,技能"云斩"倍率 1.5
敌方防御 = 60
伤害 = 120 × 1.5 - 60 × 0.5 = 180 - 30 = 150
→ 敌方掉 150 血
暴击:
命中后按暴击率判定,伤害 × 暴击倍率(通常 2 倍)
随机性(游戏感关键):
伤害可以有小浮动(如 ±5%)
→ 让战斗不那么"公式化",更有博弈感
def calc_damage(attacker, skill, target):
base = attacker.attack * skill.damage_multiplier
mitigation = target.defense * DEFENSE_FACTOR
damage = max(base - mitigation, MIN_DAMAGE) # 最低伤害保底
# 暴击判定
if random.random() < attacker.crit_rate:
damage *= 2.0
# 小浮动
damage *= random.uniform(0.95, 1.05)
return round(damage)
"伤害公式是战斗系统的'灵魂'——数值设计好不好玩,全看这个公式怎么调。真实 MOBA 的公式复杂得多(护甲穿透、免伤上限、技能加成),但核心思路一样:攻防博弈 + 随机惊喜。"
四、技能系统:技能怎么"放"出来
"技能是 MOBA 的主角。一个技能从按下到生效,经历什么?"老周说:
技能生命周期:
① 触发:按下技能按钮(或快捷键)
② 判定:冷却好了吗?蓝够吗?目标有效吗?
③ 前摇:播放施法动画(一小段延迟,高手可打断)
④ 释放:生成技能效果(弹道/范围/立即生效)
⑤ 命中:对目标结算伤害/效果
⑥ 冷却:进入 CD,开始倒计时
⑦ 后摇:收招动画
技能类型:
即时型:按下立即造成效果(如"破军"范围伤害)
弹道型:发射一个飞行物,命中才有效(如"剑影")
引导型:持续施法(如"蓄力斩")
召唤型:生成单位(如召唤分身)
冷却(Cooldown):
每个技能有自己的 CD
减 CD 装备/符文可以缩短
→ 冷却管理是 MOBA 的操作核心之一
# 技能冷却(伪代码)
class Skill:
def __init__(self, data):
self.cooldown = data["cooldown"]
self.remaining = 0 # 剩余冷却
def update(self, delta_time):
if self.remaining > 0:
self.remaining -= delta_time
def can_cast(self):
return self.remaining <= 0
def cast(self):
if not self.can_cast():
return False # 冷却中,放不出来
self.remaining = self.cooldown
# 播放动画、生成效果、结算伤害
return True
"技能系统 = 触发条件 + 效果逻辑 + 冷却管理——MOBA 的技能设计千变万化,但底层都是这个框架。'操作感'就来自:冷却、前摇、命中判定这些细节的调校。"
五、Buff/Debuff 系统:战斗的"调味料"
"光有伤害太单调。MOBA 的好玩,还有状态效果(Buff/Debuff):眩晕、减速、中毒、回血、护盾……"老周说:
Buff/Debuff 系统:
Buff:增益效果(加速、回血、加攻、护盾)
Debuff:减益效果(减速、眩晕、中毒、禁疗)
实现(状态组件):
一个"状态容器"挂在角色上
状态有:类型、持续时间、数值、来源
每帧更新:剩余时间、持续效果(如中毒每秒掉血)
到期移除
常见状态:
眩晕(Stun):不能移动、不能放技能
减速(Slow):移动速度降低 %
中毒(Poison):每秒持续掉血
护盾(Shield):吸收伤害
沉默(Silence):不能用技能
嘲讽(Taunt):强制攻击施放者
叠加规则:同类 Buff 是叠加还是刷新?
→ 要定义清楚(游戏设计细节)
# 状态效果(伪代码)
class BuffSystem:
def __init__(self):
self.buffs = []
def add_buff(self, buff):
self.buffs.append(buff)
def update(self, delta_time):
for buff in list(self.buffs):
buff.remaining -= delta_time
buff.apply(self.owner, delta_time) # 持续效果
if buff.remaining <= 0:
buff.remove(self.owner)
self.buffs.remove(buff)
def is_stunned(self):
return any(b.type == "stun" for b in self.buffs)
"Buff 系统让战斗有了'策略深度'——什么时候放控制、怎么解除控制、护盾能不能挡住真实伤害……MOBA 的操作博弈,一半在技能,一半在状态管理。"
六、血条与伤害飘字:让战斗"看得见"
"最后是反馈层——玩家怎么知道打掉血了?"老周说:
战斗反馈:
① 血条:角色头顶的生命条(实时变化)
② 伤害飘字:打中时飘出"-150"数字
③ 技能特效:施法时的粒子/光效
④ 音效:打击声、暴击声
⑤ 震动:屏幕微震(打击感)
血条实现:
UI 组件(Canvas 里的 Slider)
每帧同步到角色当前血量/最大血量
血条位置跟随角色(头顶)
伤害飘字:
生成一个"飘字 UI"在伤害位置
向上飘 + 淡出(1 秒左右)
Tween 动画(第十章 UI 细讲)
打击感 = 反馈的综合:
伤害数字 + 受击动画 + 音效 + 顿帧(短暂停顿)+ 震屏
→ 这是"游戏手感"的秘密
"战斗的'手感'不是玄学,是一堆反馈细节的叠加——同样打一下,数字、音效、顿帧、震动齐了,玩家就觉得'爽';少一个,就觉得'软绵绵'。"
七、章末:老周的第五层总结
第五层:战斗系统
├── 属性系统:基础+成长+修正(数值平衡是关键)
├── 伤害公式:攻击×倍率 - 防御×系数 + 暴击 + 浮动
├── 技能系统:触发→前摇→效果→冷却(类型:即时/弹道/引导)
├── Buff/Debuff:状态容器(眩晕/减速/中毒/护盾)
├── 血条与飘字:让战斗"看得见"
└── 打击感 = 数字+动画+音效+顿帧+震屏的叠加
下一章预告:
英雄会打了,但峡谷里只有玩家一个人——
小兵呢?野怪呢?防御塔呢?
—— AI 与寻路:让"非玩家角色"自己思考。
"小陈,按一下攻击键——敌人掉血了,飘出伤害数字了,血条动了!"老周满意地看着屏幕,"'云间对决'的第一个可玩原型诞生了。 但你现在会发现一个尴尬的问题:峡谷里只有你一个英雄,冷清得很。下一章,我们给峡谷注入'生命'——AI 与寻路:让小兵自动进攻、野怪自动巡逻、防御塔自动开火。"