# 多段ヒット処理スクリプト（※結構複雑です！）

**URL:** https://guild.rpgmakerofficial.com/t/topic/490
**Category:** 一般
**Created:** [2025 年 7 月 1 日午前 11:39 UTC](https://guild.rpgmakerofficial.com/t/topic/490 "2025-07-01T11:39:31Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![gurukosamin](https://avatars.discourse-cdn.com/v4/letter/g/53a042/32.png) [@gurukosamin](https://guild.rpgmakerofficial.com/u/gurukosamin)
#### Post date: [2025 年 7 月 1 日午前 11:39 UTC](https://guild.rpgmakerofficial.com/t/topic/490/1 "2025-07-01T11:39:31Z")

</div>

多段ヒット処理スクリプトを作りました。  
攻撃判定アクティブ時に `VariableSettings` に `ActivatedSkillId` をセットすると、DBに設定したスキルデータをもとにスクリプトが自動で該当スキルのヒット判定を行い、敵ごとに独立したヒット制御を行います。  
HitInterval（フレーム）ごとに判定が行われ最大でHitCountまでヒットします。  
DBでHitJudgeModeを0にすると相手に触れたたびにヒット判定が行われ、1にすると触れている間ずっと判定が行われます。  
ヒット判定が行われるとシグナルを送ったりなんだりできますのでお好きな処理をお書きください！  
豆知識としてスクリプトで送ったシグナルは.vsでは送った数値の型も合わせないと受信が発火しないみたいです。  
reset\_系の処理でヒット判定をリセットできます。

[HitCounter.gd](https://guild.rpgmakerofficial.com/uploads/short-url/s4zGTkotJg9hKeBEAGIbWZES3q4.gd) (4.5 KB)  
[SkillList.csv](https://guild.rpgmakerofficial.com/uploads/short-url/2RAeJFKRPdshr0r6CIESaRfvq9w.csv) (967 バイト)  
このスクリプトは、 **AttackArea2Dにアタッチして対象と接触した際にシグナルを送る** ためのものです。  
複数回接触する場合にも、スキルごとのヒット回数・クールタイム（インターバル）に基づいて処理されます。

* * *

### 🔧【セットアップ手順】

#### ① ノード構成

例として以下のようなノード構造を持つ `Player` キャラクターを想定します。

```auto
Player (CharacterBody2D)
├── AttackArea2D ← このノードにスクリプトをアタッチ

```

#### ② スクリプトアタッチ

`AttackArea2D` ノードに、以下のスクリプト（先程完成したもの）をアタッチします：

```auto
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()` により発火

* * *
