Game_Num_Basics_And_Calc

🥊 伤害判定机制详解:Hitbox vs. Distance vs. Raycast

本文档详细解析游戏中伤害判定的三种核心流派:基于数值的距离判定 (Distance Check)基于模型的物理判定 (Hitbox/Collider) 以及 射线检测 (Raycast/Hitscan)

我们将探讨它们的原理、优缺点、适用场景,并结合 FPS游戏Monster HunterElden RingVampire Survivors 等业界案例进行分析。


1. 理论基础 (Theoretical Foundation)

伤害判定的本质是回答一个问题:“在攻击生效的瞬间,受害者是否处于攻击范围内?”

1.1 距离判定 (Distance/Logic Check)

1.2 物理判定 (Hitbox/Physics Check)

1.3 射线判定 (Raycast/Hitscan Check)


2. 什么时候用什么? (Decision Matrix)

场景 推荐方案 原因
FPS / TPS (CS:GO, Overwatch) 射线判定 (Hitscan) 枪械射击要求瞬时反馈,所见即所得。
Moba / RTS (LoL, Starcraft) 距离判定 强调竞技公平性。A出去就必须中,不能因为模型动作没碰到就Miss。
MMORPG (WoW, FF14) 距离判定 网络延迟存在,物理判定会导致严重的“我明明躲开了”的同步问题。
动作游戏 (DMC, Elden Ring) 混合模式 玩家攻击通常用物理判定(追求打击感);怪物攻击常用距离判定(追求可靠性)。
割草游戏 (Vampire Survivors) 距离判定 同屏 500 个怪,用物理判定 CPU 会直接爆炸。
格斗游戏 (Street Fighter) Hitbox (2D) 定义极其严格的矩形框,这是玩法的核心。

3. 深度实践指南 (Implementation Guide)

方案 A: 纯距离判定 (Distance Check) —— 塔防/ARPG小怪首选

方案 B: 物理判定 (Weapon Collider) —— 大型Boss/精确闪避首选

方案 C: 射线判定 (Raycast/SphereCast) —— 远程武器/狙击塔首选

适合高速飞行的子弹、激光或瞬发的魔法攻击。

  1. 基础射线 (Raycast):
    • 原理: Physics.Raycast(origin, direction, out RaycastHit hit, range, enemyLayer)
    • 代码示例:
      if (Physics.Raycast(muzzlePos, direction, out RaycastHit hit, range, enemyLayer)) {
          ApplyDamage(hit.collider.gameObject);
      }
      
    • 缺点: 射线太细,容易穿过怪物的咯吱窝或两腿之间,导致“描边枪法”。
  2. 粗射线 (SphereCast / BoxCast):
    • 想象发射一根粗壮的“圆柱体”而不是细线。
    • Physics.SphereCast(origin, radius, direction, out hit, maxDist)
    • 优点: 极大地提高了命中率,手感更好,允许稍微打偏一点也能中。这是现代 FPS 的主流做法。
  3. 多段射线 (Multi-Raycast) - 霰弹枪:
    • 在一个圆锥体内随机发射 10 条射线。
    • 每条射线单独判定伤害。
    • 效果: 距离越近,命中的射线越多,伤害越高(贴脸暴击)。

3.4 复杂动作判定 (Advanced Animation Sync)

不仅仅是旋转攻击,任何非瞬发动作都需要让“判定形状”匹配“动画轨迹”。

A. 旋转攻击 (Spin / Whirlwind)

问题: 纯圆形判定会导致“刀未到,伤先至”。 解法: 多段扇形检测 (Multi-Stage Sector Check)

B. 突刺 (Thrust / Stab)

问题: 动画是细长的直线,如果用圆形判定,会打到身侧的空气。 解法: 延迟矩形检测 (Delayed Box Check)

C. 下劈 (Overhead Smash)

问题: 动作有明显的前摇(举剑),如果按下键立刻伤害,毫无打击感。 解法: 关键帧触发 (Impact Frame)

核心原则: 判定形状 (Hit Shape) 必须拟合 动画轨迹 (Animation Trail)。


4. 业界优秀案例 (Industry Case Studies)

🔫 Overwatch (守望先锋) —— Hitscan 与 Projectile 的平衡

🏆 Monster Hunter (怪物猎人) —— 精准 Hitbox 的极致

💍 Elden Ring (艾尔登法环) —— 混合的艺术

🧛 Vampire Survivors (吸血鬼幸存者) —— 性能的妥协


5. Project Vampirefall 选型指导 (Strategic Guide)

针对 塔防 + Roguelike 这一独特混合品类,我们需要在“海量单位性能”与“动作打击感”之间走钢丝。

5.1 核心原则:分级判定策略

不要试图用一种方案解决所有问题。按单位数量级分层:

单位类型 数量级 推荐方案 理由
海量杂兵 (Swarm) 100+ 距离判定 (Distance) CPU 预算极为有限,必须使用最廉价的数学计算。配合 GPU Instancing 渲染。
精英怪 (Elite) 10-20 距离 + 扇形 (Sector) 需要一定的方向感,不能让怪屁股对着玩家也能打出伤害。
Boss 1 混合判定 (Hybrid) 普攻用距离,大招用物理 Hitbox 或复杂的射线组合,提供“可闪避”的交互空间。
防御塔 (Tower) 20-50 距离 (AoE) / 射线 (单体) 塔是静止的,不需要复杂的动作判定。

5.2 投射物选型:Hitscan vs. Projectile

5.3 混乱环境下的预警机制 (Telegraphing)

在肉鸽后期,屏幕上全是特效。

5.4 网络同步考量 (Multiplayer Considerations)

如果未来支持联机 Co-op:

5.5 英雄多武器判定架构 (Hero Weapon Architecture)

针对 Vampirefall 英雄拥有多种武器(太刀、大剑、弓、弩)且具备招式连段(Combo)的特点,建议采用 组件化判定框架

A. 架构设计

将“攻击逻辑”从代码中剥离,封装为可插拔的模组 (ScriptableObject):

B. 武器特定实现

  1. 太刀 (Katana) - 快节奏/多段判定
    • 普攻 (Slash): 使用 延迟矩形检测。速度快,不需要精确 Hitbox,保证命中率优先。
    • 旋风斩 (Spin): 使用 多段扇形检测 (如前文 3.4 所述),确保 360° 无死角且时序正确。
    • 居合 (Iaijutsu): 使用 超长距离 Hitscan超大矩形,强调“瞬杀”感。
  2. 大剑 (Greatsword) - 慢节奏/重打击
    • 横扫 (Wide Swing): 建议开启 Physics Hitbox。因为动作慢,玩家会盯着剑刃看,穿模会很明显。且物理判定能天然支持“打到墙壁弹刀”的硬核机制。
    • 下劈 (Slam): 严格的 Impact Frame 触发震波 (AoE 圆形)。
  3. 长弓 (Bow) - 物理手感
    • 使用 Projectile (实体箭矢)
    • 抛物线: 加上重力,让玩家体验“吊射”的乐趣。
    • 蓄力: 蓄力时间决定箭矢的初速度和穿透力。
  4. 轻弩 (Crossbow) - 机械精准
    • 使用 Hitscan (射线)极高速 Projectile
    • 强调指哪打哪,适合快速清理高威胁目标(如自爆怪)。

C. 数据驱动配置

每个武器的每一招(Combo 1, 2, 3)都应配置一个 WeaponMoveSet

class WeaponMove {
    public float DamageMult;
    public float ImpactTime; // 判定生效时间点
    public HitType Type; // Melee, Projectile...
    public Vector3 HitboxSize; // 仅近战有效
}