多段ヒット処理スクリプト(※結構複雑です!)

多段ヒット処理スクリプトを作りました。
攻撃判定アクティブ時に VariableSettingsActivatedSkillId をセットすると、DBに設定したスキルデータをもとにスクリプトが自動で該当スキルのヒット判定を行い、敵ごとに独立したヒット制御を行います。
HitInterval(フレーム)ごとに判定が行われ最大でHitCountまでヒットします。
DBで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(...) により、スキルに設定された HitCount, HitInterval を読み込む
  4. hit_registry に記録された履歴を元に、ヒット判定の可否を判断
  5. 有効な場合:
  • ヒット回数をカウントアップ
  • 対象ノードの attacked シグナルを emit_signal() により発火

1 Like