用途
本技能面向 Godot 引擎中的战斗系统开发,提供一套专家级实现模式,覆盖命中盒/受击盒架构、伤害计算、生命组件、战斗状态机、连招系统、技能冷却与伤害飘字等核心模块。适用于动作游戏、RPG 或格斗游戏。
主要能力
技能围绕以下脚本与模式组织:
- damage_data.gd:类型化的 DamageData Resource,使用 enum / @export_flags 位标志表示伤害类型(不使用字符串元素)。
- health_component.gd:take_damage 方法、无敌帧(i-frame)门控,以及 health_changed / died 信号。
- hitbox_hurtbox.gd / hitbox_component.gd:通过 Area 将命中传递到受击盒,后者为 3D Area 命中盒配套脚本(与标志对齐)。
- combat_system_patterns.gd:鸭子类型、命中停顿(hit-stop)、无节点 AoE、帧同步。
- combo_system.gd:带窗口的连招缓冲。
- combat_state.gd:轻量级战斗有限状态机门控。
- damage_popup.gd:浮动伤害标签补间(生产环境建议池化)。
- combat_logger.gd:批量战斗遥测 JSON。
- networked_damage_manager.gd:服务器校验伤害 RPC 外壳。
- hitbox_visualizer.gd:切换碰撞调试颜色。
使用方式
技能给出强制性的“黄金路径”(Golden Path):先使用 damage_data.gd 定义类型化伤害数据,再用 health_component.gd 处理生命与无敌帧,然后通过 hitbox_hurtbox.gd / hitbox_component.gd 实现命中传递,最后用 combat_system_patterns.gd 处理 AoE、命中停顿与鸭子类型。技能强调不要在场景中重复内联 Hitbox/Health/Combo/Ability 教程,而应将技能路由到 godot-ability-system,按 godot-composition 组合组件,状态机使用 godot-state-machine-advanced。
技能还提供决策树表格,按任务指引应加载或不应加载的脚本,例如定义伤害载荷用 damage_data.gd,HP 与无敌帧用 health_component.gd,近战/投射物体积用 hitbox_hurtbox.gd / hitbox_component.gd,AoE/命中停顿/鸭子类型用 combat_system_patterns.gd,技能冷却/技能栏用 godot-ability-system,连招缓冲用 godot-input-handling 加状态机。
伤害类型契约示例(来自 damage_data.gd):
enum DamageType { PHYSICAL = 1, FIRE = 2, ICE = 4, LIGHTNING = 8, POISON = 16 }
@export_flags("Physical", "Fire", "Ice", "Lightning", "Poison")
var damage_types: int = DamageType.PHYSICAL
命中盒必须传递 DamageData(或基于相同标志构建的等效 AttackData),绝不使用 "Physical" 字符串。
适用场景
适用于动作游戏、RPG 或格斗游戏的战斗系统开发,包括命中判定、伤害计算、生命与无敌帧、连招、技能冷却、伤害飘字、战斗遥测、网络化伤害校验与命中盒调试等。
限制与禁止事项
技能明确列出多项禁止做法,例如:绝不使用直接伤害引用(target.health -= 10);绝不忘记无敌帧;绝不让命中盒永久激活;绝不使用组进行基于物理的命中过滤(应优先使用碰撞层/掩码);绝不在没有 DamageData 对象的情况下发出伤害信号;绝不对元素伤害类型使用原始字符串;绝不使用 try/catch 验证目标(GDScript 无异常);绝不使用 OS.delay_msec() 硬编码受击硬直;绝不在 _process() 中应用 RigidBody 冲量;绝不将 UI 生命条耦合在 Player 脚本内;绝不在死亡实体上保留激活的 CollisionShape;绝不对 CollisionShape 进行非均匀缩放;绝不使用实例化节点存储基础战斗属性(优先 Resource / RefCounted);绝不对高频状态名使用标准字符串(优先 StringName);绝不忘记对共享 Resource 属性调用 duplicate()。
此外,技能建议渐进式披露:仅针对正在实现的 API 浏览官方文档,在连接相邻系统时打开相关技能,不要预加载整个技能网络。