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