我编写了一个多段命中处理脚本。
当攻击判定激活时,如果在 VariableSettings 中设置 ActivatedSkillId,脚本将基于数据库中设定的技能数据自动执行对应技能的命中判定,并对每个敌人进行独立的命中控制。
每经过 HitInterval(帧)进行一次判定,最多命中 HitCount 次。
如果在数据库中 HitJudgeMode 设置为 0,则每次接触都会进行命中判定;如果设置为 1,则在持续接触期间会持续进行判定。
一旦进行命中判定,就可以发送信号等,请编写您喜欢的处理逻辑!
作为小贴士,在脚本中发送的信号,如果 .vs 中接收时数值类型不匹配,信号似乎不会触发。
可以通过 reset_ 相关的处理来重置命中判定。
HitCounter.gd (4.5 KB)
SkillList.csv (967 字节)
此脚本用于附加到 AttackArea2D 上,并在与目标接触时发送信号。
即使发生多次接触,也会根据每个技能的命中次数和冷却时间(间隔)进行处理。
【设置步骤】
① 节点结构
假设有一个名为 Player 的角色,具有如下节点结构:
Player (CharacterBody2D)
├── AttackArea2D ← 将脚本附加到此节点
② 附加脚本
将以下脚本(刚才完成的完整脚本)附加到 AttackArea2D 节点:
extends Area2D
# (省略:附加上述完整脚本)
③ 检查器设置
在 AttackArea2D 节点的检查器中进行如下设置:
target_group→"Enemy"(接触目标的组名)variable_settings→ 引用../VariableSettings
④ 接触目标侧设置
在敌对角色侧(例如 Enemy)准备好信号。
【工作流程】
- AttackArea2D 与
Enemy组的节点接触 - 从
VariableSettings获取当前技能 ID(请在攻击时将技能 ID 设置为 ActivatedSkillId) - 通过
GameManager.get_project_database_plain(...)读取技能中设定的HitCount和HitInterval - 基于
hit_registry中记录的履历,判断是否允许进行命中判定 - 如果有效:
- 命中次数计数加一
- 通过
emit_signal()触发目标节点的attacked信号