多段击处理脚本(※相当复杂!)

我编写了一个多段命中处理脚本。
当攻击判定激活时,如果在 VariableSettings 中设置 ActivatedSkillId,脚本将基于数据库中设定的技能数据自动执行对应技能的命中判定,并对每个敌人进行独立的命中控制。
每经过 HitInterval(帧)进行一次判定,最多命中 HitCount 次。
如果在数据库中 HitJudgeMode 设置为 0,则每次接触都会进行命中判定;如果设置为 1,则在持续接触期间会持续进行判定。
一旦进行命中判定,就可以发送信号等,请编写您喜欢的处理逻辑!
作为小贴士,在脚本中发送的信号,如果 .vs 中接收时数值类型不匹配,信号似乎不会触发。
可以通过 reset_ 相关的处理来重置命中判定。

HitCounter.gd (4.5 KB)
SkillList.csv (967 字节)
此脚本用于附加到 AttackArea2D 上,并在与目标接触时发送信号
即使发生多次接触,也会根据每个技能的命中次数和冷却时间(间隔)进行处理。


:wrench:【设置步骤】

① 节点结构

假设有一个名为 Player 的角色,具有如下节点结构:

Player (CharacterBody2D)
├── AttackArea2D ← 将脚本附加到此节点

② 附加脚本

将以下脚本(刚才完成的完整脚本)附加到 AttackArea2D 节点:

extends Area2D

# (省略:附加上述完整脚本)

③ 检查器设置

在 AttackArea2D 节点的检查器中进行如下设置:

  • target_group"Enemy"(接触目标的组名)
  • variable_settings → 引用 ../VariableSettings

④ 接触目标侧设置

在敌对角色侧(例如 Enemy)准备好信号。


【工作流程】

  1. AttackArea2D 与 Enemy 组的节点接触
  2. VariableSettings 获取当前技能 ID(请在攻击时将技能 ID 设置为 ActivatedSkillId)
  3. 通过 GameManager.get_project_database_plain(...) 读取技能中设定的 HitCountHitInterval
  4. 基于 hit_registry 中记录的履历,判断是否允许进行命中判定
  5. 如果有效:
  • 命中次数计数加一
  • 通过 emit_signal() 触发目标节点的 attacked 信号
2 个赞