HOME> 伊涅斯塔世界杯> 战斗伤害计算公式

战斗伤害计算公式

2026-07-23 20:00:32

一整套完整可扩展的伤害计算公式体系,涵盖:

普攻与技能伤害

暴击与非暴击

招架与非招架

各类伤害、治疗、加成与减免

支持属性比例调节与平衡参数

🎯 一、主要参与属性

属性名

英文代号

说明

攻击

ATK

攻击方攻击力

防御

DEF

受击方防御力

生命

HP

当前生命值(非直接参与公式)

暴击率

CRI

造成暴击的概率

暴击伤害

CRIDMG

暴击时的伤害倍率(如1.5表示150%)

命中率

HIT

命中概率(与闪避对抗)

闪避率

EVA

被攻击方闪避概率

暴击抵抗

CRI_RES

被攻击方降低对方暴击率的能力

暴伤减免

CRIDMG_RED

被攻击方减少暴击伤害的能力

伤害加成

DMG_ADD

最终伤害加成(万金油类型)

治疗加成

HEAL_ADD

施法者对治疗类技能的加成

受到治疗加成

HEAL_RECV_ADD

受治疗方额外受到治疗的比例

技能伤害加成

SKILL_DMG_ADD

技能类攻击的额外伤害比例

招架概率

PARRY_RATE

被攻击方触发招架的概率

招架效果

PARRY_EFF

招架时减伤比例(如0.5代表50%减伤)

幸运一击概率

LUCK_RATE

特殊“幸运一击”触发概率,可视为额外暴击或特殊效果

⚔️ 二、伤害计算主流程

以一次攻击为例:

1. 命中判定

2. 招架判定

3. 暴击判定

4. 计算基础伤害

5. 应用各类加成与减免

6. 应用招架/暴击等特殊修正

7. 应用最终防御修正与上下限限制

🧮 三、公式设计

1️⃣ 命中判定

命中概率 = HIT / (HIT + EVA)

是否命中 = 随机() < 命中概率

如果未命中 → 伤害 = 0,结束。

2️⃣ 招架判定

是否招架 = 随机() < PARRY_RATE

如果招架成功 → 后续计算伤害 × (1 - PARRY_EFF)

3️⃣ 暴击判定

真实暴击率 = max(0, CRI - CRI_RES)

是否暴击 = 随机() < 真实暴击率

4️⃣ 基础伤害计算(物理类)

基础伤害 = (ATK^2) / (ATK + DEF) * 技能系数

这个形式(平方比)可以保证攻防差距不爆炸。

“技能系数”通常来自技能配置(如普通攻击 1.0,技能 2.5)。

5️⃣ 技能与通用加成

伤害倍率 = 1 + DMG_ADD + SKILL_DMG_ADD

乘到基础伤害上。

6️⃣ 暴击修正

if (是否暴击)

暴击系数 = (CRIDMG - CRIDMG_RED)

else

暴击系数 = 1

7️⃣ 招架修正

if (是否招架)

招架系数 = 1 - PARRY_EFF

else

招架系数 = 1

8️⃣ 幸运一击修正(可选)

if (随机() < LUCK_RATE)

幸运系数 = 1.5 ~ 2.0 // 可配置

else

幸运系数 = 1

9️⃣ 最终伤害公式

最终伤害 = 基础伤害 × 伤害倍率 × 暴击系数 × 招架系数 × 幸运系数

再限制:

最终伤害 = max(1, 最终伤害)

💚 四、治疗类公式

1️⃣ 普通治疗技能

治疗量 = (施法者.ATK * 技能系数) × (1 + HEAL_ADD) × (1 + 目标.HEAL_RECV_ADD)

2️⃣ 暴击治疗(可选规则)

如果随机() < (CRI - CRI_RES)

治疗量 ×= (CRIDMG - CRIDMG_RED)

🔧 五、完整伪代码实现示例

float CalculateDamage(Character attacker, Character defender, Skill skill)

{

// 命中判定

float hitChance = attacker.HIT / (attacker.HIT + defender.EVA);

if (Random.value > hitChance)

return 0f; // Miss

// 招架

bool parry = Random.value < defender.PARRY_RATE;

float parryFactor = parry ? (1f - defender.PARRY_EFF) : 1f;

// 暴击

float realCritRate = Mathf.Max(0, attacker.CRI - defender.CRI_RES);

bool crit = Random.value < realCritRate;

float critFactor = crit ? (attacker.CRIDMG - defender.CRIDMG_RED) : 1f;

// 幸运一击

bool lucky = Random.value < attacker.LUCK_RATE;

float luckyFactor = lucky ? 1.5f : 1f;

// 基础伤害

float baseDamage = (attacker.ATK * attacker.ATK) / (attacker.ATK + defender.DEF);

baseDamage *= skill.DamageScale; // 技能系数

// 各类加成

float totalFactor = (1 + attacker.DMG_ADD + skill.SkillDamageAdd) * parryFactor * critFactor * luckyFactor;

// 最终伤害

float finalDamage = baseDamage * totalFactor;

return Mathf.Max(1, finalDamage);

}

⚙️ 六、公式调优建议

调整点

建议

攻防差异太大

用 (ATK^2)/(ATK+DEF) 替代 ATK-DEF 模式

暴击过强

调整 CRIDMG 默认值从 2.0 → 1.5

招架过弱

增加“反击”效果(例如招架后50%概率反击)

技能差异太小

使用技能系数 0.8~3.0 区间

防御成长太快

改为 (ATK / (DEF + 常数)) 结构

是否希望我帮你把这套公式整理成一份可配置的 Excel 表 + JSON + Unity 脚本读取模板?

那样你可以直接在 Unity 中挂到角色身上测试实际战斗效果。

鱼三百六十头,则有蛟龙长之 蚊母鸟 鹅毛被 原文全文及出处

4s店加装倒车雷达需要多少钱

最新发表 newmodule
友情链接 newmodule