# チュートリアル：スクリプト講座 #1 – 射撃攻撃を作成しよう

**URL:** https://guild.rpgmakerofficial.com/t/topic/59
**Category:** チュートリアル
**Tags:** tutorial, english
**Created:** [2025 年 6 月 6 日午前 7:09 UTC](https://guild.rpgmakerofficial.com/t/topic/59 "2025-06-06T07:09:45Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![GGG-Administrator](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/ggg-administrator/32/6_2.png) [@GGG-Administrator](https://guild.rpgmakerofficial.com/u/GGG-Administrator)
#### Post date: [2025 年 6 月 6 日午前 7:09 UTC](https://guild.rpgmakerofficial.com/t/topic/59/1 "2025-06-06T07:09:45Z")

</div>

このコースでは、 **ACTION GAME MAKER** でのスクリプティングの基礎を学びます。  
**パート 1** では、基本的な **攻撃システム** を作成します。

* * *

## ⚠ ビジュアルスクリプトの利用に関する注意点

* * *

### **📑 ビジュアルスクリプトとシーンタブ**

Godot の仕組み上、現在アクティブなシーンタブに関係なく、任意のビジュアルスクリプトタブを開くことは技術的に可能です。  
ただし、 **ACTION GAME MAKER のビジュアルスクリプトは、現在開かれているシーンタブ内のノードに依存します** 。

異なるシーンがアクティブな状態でビジュアルスクリプトを編集しようとすると、正しいゲームオブジェクトからのアニメーションデータ、変数、またはスイッチにアクセスできなくなります。

> 🔹 もし这种情况が発生しても、パニックにならず、スクリプトに **変更を加えず** に正しいシーンタブに戻ってください。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/1eacbedba6cb7f07d6ddfeb7d69a167105564185.png)

* * *

### **📁 ビジュアルスクリプトとファイル参照**

Godot の制限により、アクション内の他のオブジェクトへの参照（オブジェクトパスなど）は、すべて **プレーンな文字列** として保存されます。

つまり、参照されているゲームオブジェクトを **ファイルシステム** 内で移動すると、リンクが切断され、参照切れが発生します。

ACTION GAME MAKER には **参照切れチェック** ツールが用意されていますが、大規模なプロジェクトで壊れた参照を修正するのは非常に時間がかかります。

> ✅ **開発を開始する前に、フォルダ構造を適切に整理することを強くお勧めします。**

* * *

## ✅ 始めましょう

以前のチュートリアルと同様に、このコースでも最初のコースで提供された **チュートリアルプロジェクト** を使用します。  
準備を整えるため、今すぐプロジェクトを開いてください。

---

<div class="post-metadata">

### Author: ![GGG-Administrator](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/ggg-administrator/32/6_2.png) [@GGG-Administrator](https://guild.rpgmakerofficial.com/u/GGG-Administrator)
#### Post date: [2025 年 6 月 6 日午前 7:10 UTC](https://guild.rpgmakerofficial.com/t/topic/59/2 "2025-06-06T07:10:32Z")

</div>

## **ステップ 1: 弾丸オブジェクトの作成 – 弾丸の設定**

* * *

### 1. 新しいゲームオブジェクトシーンを作成しましょう。

中央のエディタパネルで、新しいシーンタブを開くために **＋タブ** をクリックします。  
次に、シーンウィンドウで **Game Object** を選択します。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/f78e4a77fe059c4646ca1431b18202b2a7290968.png)

* * *

### 2. オブジェクト作成ウィンドウで、以下を設定します。

- **オブジェクト名** : 任意の名前（ここでは `sample_bullet` を使用します）
- **テンプレート** : `bullets`
- **タイプ** : `bullet_base`
- **グループ** : `Player`

次に、 **Create** ボタンをクリックします。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/612b6eff2da296809a34535ea5b862055761b12f.png)

* * *

### 3. 基本設定が事前設定されたゲームオブジェクトシーンが生成されます。

タブを右クリックするか、 **Ctrl + S** を押して、すぐにシーンを保存し、好きな場所に保存してください。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/fa4604ecd563369e5ab059e8f1fdc5183e489093.png)

* * *

### 4. 弾丸の視覚表現が必要ですが、画像ファイルを持っていません。

代わりに、長方形を描画する Godot ノードを使用します。  
シーンウィンドウの左上にある **＋ボタン** をクリックします。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/6eb245bacf6d569529c3e03544aefab7d06c183d.png)

* * *

### 5. ノード選択ダイアログで、以下へ移動します。

`Node > CanvasItem > Control > ColorRect` を選択して作成します。  
検索バーを使用して、「Color」または「Rect」と入力すると簡単に見つかります。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/3baf1915b476f72eaf11492a7db576e10e61fdf2.png)

* * *

### 6. 白い長方形が表示されます。

デフォルトではかなり大きいため、縮小しましょう。  
シーンウィンドウで `ColorRect` ノードを選択します。

* * *

### 7. **インスペクタ** で、以下へ移動します。

`Layout > Transform` にて、サイズを **40×40** から約 **4×4** に変更します。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/628d8df195ccdcad78e622d2dbbc4f33ec2da610.png)

* * *

### 8. 長方形は左上隅から描画されるため、中央に配置しましょう。

**Position** を以下のように設定します。

- `x = -2`
- `y = -2`  
これで、長方形がシーンの原点を中心に配置されます。

![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/37fd365cf43788ebde57cca965c1903848a167d9.png)

* * *

### 9. 赤い半透明の長方形は **攻撃当たり判定** を表していますが、大きすぎます。

サイズを変更しましょう。

- シーンウィンドウで `AttackCollision` を選択します。
- コーナーを調整して、`ColorRect` よりも少し大きくします。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/ea8e434162b9a44d6828d56d77b568c3e8bd9e99.png)

* * *

### 10. **薄い青色の半透明の四角形（`CollisionShape2D`）** は壁の当たり判定です。

現状では、壁が重なり合うため攻撃がブロックされてしまいます。  
**壁の当たり判定を攻撃範囲よりもさらに小さく** しましょう。

サイズを変更します。

- シーンウィンドウで `CollisionShape2D` を選択します。
- コーナーを調整して、`AttackCollision` よりも少し小さくします。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/8f7ecbd72163546b3abe40963034ad15be655f3a.png)

* * *

### 10. 次に、`MoveAndJumpSettings` ノードを選択します。

デフォルトでは、水平および垂直の移動速度は **100 px/sec** で、非常に遅いです。  
これを約 **300 px/sec** に増やしましょう。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/0b65caf28505acc32f342ac27c5088cf80774738.png)

* * *

### 11. 通常はアニメーションや他のプロパティも設定しますが、

このシンプルな弾丸オブジェクトでは、追加の設定は必要ありません。

---

<div class="post-metadata">

### Author: ![GGG-Administrator](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/ggg-administrator/32/6_2.png) [@GGG-Administrator](https://guild.rpgmakerofficial.com/u/GGG-Administrator)
#### Post date: [2025 年 6 月 6 日午前 7:11 UTC](https://guild.rpgmakerofficial.com/t/topic/59/3 "2025-06-06T07:11:17Z")

</div>

## **ステップ 2: 弾オブジェクトの作成 – 弾スクリプト**

* * *

### 1. 新しいスクリプトを作成しましょう。

シーンウィンドウの上部にある\*\*📜（スクロールアイコン）\*\*をクリックして、新しいスクリプトを作成します。

![image](https://cdck-file-uploads-us1.s3.dualstack.us-west-2.amazonaws.com/flex002/uploads/rpgmaker_community/original/1X/d9300bc3bed11fdfdaaad3c1234d43db72f52336.png)

* * *

### 2. 言語が **VisualScript** に設定されていることを確認し、名前を付けて **作成** をクリックします。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/a842e408a7e079177747fea51628d84df4f53af1.png)

* * *

### 3. 最初のステートノードを **Move** に名前を変更し、 **重力を無視** オプションを有効にします。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/9ada142de9c06c60aa41aa3abd753c6520d9d09b.png)

* * *

### 4. **Actions \> + Add Executable Action** に移動し、 **Attack Settings** アクションを追加します。

**Hit Group** を `Enemy` のみに設定し、弾が誤ってプレイヤーに当たらないようにします。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/d940ea39143f51df17ffd407088ea186181f0f4d.png)

* * *

### 5. もう一つのステートノードを追加し、 **Remove** と名付けます。

**重力を無視** オプションも有効にします。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/090b27a52f5ad8a1a30d468ba744e268c44e8fef.png)

* * *

### 6. **Remove** ステートで、 **RemoveSelf** という **Executable Action** を追加します。

これにより、オブジェクトがゲームから削除されます。  
使用後は常に弾や敵をクリーンアップしてください。そうしないと、それらが残ってシステムリソースを消費し続けます。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/7b8d36926526ddc9240b59436ba7dbc029a7f63c.png)

* * *

### 7. **Move** ステートを右クリックし、 **Remove** ステートへの **リンク** を作成します。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/060690e21d36cdca4bd5e696b647b91a3f111562.png)

* * *

### 8. 最初の **遷移条件** を設定します：

インスペクターで、 **Conditions \> Add Condition** に移動し、 **Contact With Hit Area** を選択します。  
以下のように設定します：

- **Direction** : All
- **Target Group** : Enemy

これにより、弾が敵に当たったときに削除されます。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/0755689c45ff7244591d986028aa847ba5d42199.png)

* * *

### 9. 2 つ目の条件を追加します： **Offscreen** （弾がカメラビューの外に出た場合）。

以下のように設定します：

- **Target Type** : This Node
- **Logical Condition** with previous: **OR**

> ⚠ この設定を AND のままにすると、両方の条件が真である場合にのみ発動してしまいます。これは望ましくありません。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/3268ef8123c0e10ffe467c4d01735124f4f28b8c.png)

* * *

### 10. 3 つ目の条件を追加します： **Contact With Tile** 。

同様に、Direction を All に設定し、 **OR** で結合します。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/f4b137ee975198c46ab3b0583bd63f5dbd211f93.png)

* * *

### ✅ これで、弾は以下の条件のいずれかで自動的に削除されます：

- 敵に当たった場合
- 画面外に出た場合
- タイルに衝突した場合

* * *

## 💡 ヒント

### 🧨 **Remove と RestoreRemove、Disable と Enable の違い**

似たようなアクションに気づかれたかもしれませんが、それぞれの違いは以下の通りです：

- **Remove** : オブジェクトをゲームから完全に削除します。戻ってくる必要のない弾や敵などのアイテムに最適です。
- **RestoreRemove** : 削除されたオブジェクトを復活させますが、新しく生成された状態になります。元の状態は失われます。
- **Disable** : オブジェクトを削除せずに一時的に無効化します。
- **Enable** : 無効化されたオブジェクトを再活性化し、元の状態 exactly に復元します。

> ⚠ **無効化されたオブジェクトもメモリを消費します。**  
> 再利用する予定がない場合は、代わりに **Remove** を使用してください。

* * *

### 🎞 **消滅アニメーションを追加したい場合**

この例では、簡略化のためアニメーションをスキップしました。  
しかし、弾が消える前にアニメーションを表示したい場合は、ヒット後に直接 `RemoveSelf` を呼び出さないでください。

その代わりに、Move と Remove の間に **中間の「Hit」ステート** を追加します：

1. 衝突時に `Hit` ステートへ遷移します。
2. アニメーションを再生します。
3. \*\*「Animation Ended」 **または** 「Time Elapsed」\*\*のような条件を追加して、その後 `Remove` ステートへ遷移します。

---

<div class="post-metadata">

### Author: ![GGG-Administrator](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/ggg-administrator/32/6_2.png) [@GGG-Administrator](https://guild.rpgmakerofficial.com/u/GGG-Administrator)
#### Post date: [2025 年 6 月 6 日午前 7:12 UTC](https://guild.rpgmakerofficial.com/t/topic/59/4 "2025-06-06T07:12:24Z")

</div>

## **ステップ 3：プレイヤーの弾と銃を設定する**

* * *

### 1. `Object_Sampleplayer` タブに戻ります。

### 2. シーンパネルの左上にある **Add Node** ボタンをクリックします。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/e0c4bc25e50fdc6b83a55f87ecd2e8d6283f6d98.png)

* * *

### 3. `Node > AGMaker` から **BulletSettings** ノードを追加します。

このノードは発射される弾を管理します。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/5958bc10900201c8f9dee6106ae68ead60dd15f1.png)

* * *

### 4. `BulletDataList > + Add Bullet > <empty> > NewBulletData` を展開して、新しい弾データを生成します。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/f37f6c2ba3e9475c8788535133cadcffefb84546.png)

* * *

### 5. `Bullet Base Settings` で基本的な弾の設定を構成します：

- **Name** : 任意の名前を設定します（例：`Sample_Bullet`）
- **Object Path** : 先ほど作成した `sample_bullet.tscn` を選択します。

> ⚠ _このファイルを後で移動させると、参照が切断されます。_

- **Unlimited Bullets** : このオプションを有効にします

> （詳細は後で説明します。）

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/26b00670b0ba7a078f524dcede79c57e5b2a4845.png)

* * *

### 6. **Initial Behavior** を `FireObjectDirection` に設定し、オブジェクトが向いている方向に弾を発射するようにします。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/7f32c3bfa9c62553661cf00be8c2ab2b65b4eb96.png)

* * *

### 7. 弾の設定は完了です！

これで、発射アクションを使用して、プレイヤーが向いている方向に `sample_bullet` を発射できるようになります。

* * *

### 8. 次に、プレイヤーに銃を取り付けましょう。

`AnimationPlayer` を選択し、アニメーション `044_Gun_Aim` を再生してみてください。  
照準アニメーションが再生されますが、プレイヤーはまだ武装していないように見えます。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/5d27ad1fe2beba5627149baee386ef872b095a06.png)

* * *

### 9. 銃の画像はデフォルトで含まれています。

ファイルシステムで `templates > objects > weapons > P_other` に移動します。  
`W_005_gun.png` を使用します。キャラクターの左手に良く合います。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/1056a7dfa76c4091594dc2fa8327eb1df49cd035.png)

* * *

### 10. シーンパネルで以下を選択します：

`BoneAnimationRoot2D > Skeleton > B_Chest > B_Joint_L > B_Arm_L > B_Hand_L > B_Weapon_L`

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/045a323633087ae63637b521213d9c9567cd05d7.png)

* * *

### 11. `B_Weapon_L` が選択された状態で、`W_005_gun.png` を手の近くまでドラッグし、 **Shift キーを押しながらドロップ** します。

これにより、画像が `B_Weapon_L` の **子ノード** として追加されます。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/208b13fe27876285f6dd042ee5e598b93d24fa7c.png)

* * *

### 12. 正しく行っていれば、`W005Gun` が `B_Weapon_L` の子になっているはずです。

そうでない場合は、手動で正しいノードの下に移動させてください。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/fb97c3446e7ce8431b9f105158255f5c21030206.png)

* * *

### 13. 角度と位置を調整します。

`W005Gun` を選択し、インスペクターで `Node2D > Transform` に移動します。  
以下を設定します：

- **Position** : x: 12, y: 21
- **Rotation** : 156.4 度

> 💡 回転が 0 であっても、アニメーションによりボーン自体が回転している場合があり、子ノードに影響を与えることがあります。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/37c83f2a54d0b7ed3561df46b5eee6aeac59d92b.png)

* * *

### 14. アニメーションを再生して、移動中に銃が正しく見えるか確認します。

すべてが問題なければ、 **発射ポイント** を調整しましょう。

* * *

### 15. **Connector** ノードを使用して、弾の発射点を指定します。

キャラクターには `Connector - gun fire` というノードがありますが、足元に表示されています。  
これを銃の銃口まで移動させます。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/4f0299e54ea0a1ab00da0882b54e4c24d1674891.png)

* * *

### ✅ これで、プレイヤーに弾、銃、正しい発射点が備わりました！

* * *

## 🛠 弾の設定の詳細

### 🔹 **基本設定**

- **Shot Count** : アクションごとに発射される弾の数。  
バースト発射や散弾銃効果に使用できます。

> ⚠ 発射中に状態が変更されると、発射は停止します。

- **Fire Interval** : 多連発時の弾ごとの間隔。
  - 0.3 秒 = 0.3 秒ごとに 1 発発射
  - 0 秒 = すべての弾を同時に発射

- **Shot Limit** : 画面に表示される弾の最大数。
  - 1 の場合、前の弾が消えるまで待つ必要があります。

* * *

### 🔹 **初期挙動**

- **Initial Behavior** : 発射された後の弾の動き方。

> ⚠ 弾のスクリプトが動きを制御している場合、 **そちらが優先されます** 。

- **Spread Range** : 広がり（散弾）の度合い。
- **Spread Type** :
  - `Fixed`: 広がり角度内で均等に配置
  - `Wiper`: 発射中に前後に揺れ動く
  - `Random`: 広がり範囲内でランダムな角度

* * *

### 🔹 **飛行中の挙動**

発射後の挙動を制御します。例：

- 固定されたターゲットへの誘導
- ブーメランのような軌道

> ⚠ 再度、弾自体のスクリプトが **これらの設定よりも優先されます** 。

---

<div class="post-metadata">

### Author: ![GGG-Administrator](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/ggg-administrator/32/6_2.png) [@GGG-Administrator](https://guild.rpgmakerofficial.com/u/GGG-Administrator)
#### Post date: [2025 年 6 月 6 日午前 7:13 UTC](https://guild.rpgmakerofficial.com/t/topic/59/5 "2025-06-06T07:13:13Z")

</div>

## **ステップ 4：弾を発射する**

* * *

### 1. **Player** の隣の 📜 アイコンをクリックして、ビジュアルスクリプトを開きます。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/87c26892e0c64ea9918fda8dae0ca90ac83f8f0c.png)

* * *

### 2. **Idle** の近くに新しい **Shoot** ステートを作成します。

アニメーションを **044\_Gun\_Shoot** に設定します。

\u003e ⚠ アニメーションが表示されない場合は、`Object_SamplePlayer` タブが開いていることを確認してください。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/660961d7d0ca5741dc0e1a832ef90edff302f0db.png)

* * *

### 3. 実行可能なアクション **Fire Bullet** を追加します。

設定：

- **Bullet Data** を `Sample_Bullet` に設定
- **Connector** を `Connector - gun fire` に設定

これにより、プレイヤーが銃口から `Sample_Bullet` を発射できるようになります。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/b06a98c3f090f870876995ac2a9f3ea1e7f72539.png)

* * *

### 4. **Idle → Shoot** をリンクします。

条件を以下に設定します： **X ボタンが押されている間** （キーボードの場合は C キー）。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/bec796dfc9377bce13751b370e82f14a2a454fac.png)

* * *

### 5. **Shoot → Idle (ショートカット)** をリンクします。

条件を以下に設定します： **アニメーションが終了したとき** 。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/1X/c57aa171f7fe2eeed8a4d6cfe609ffa4518b2315.png)

* * *

### 6. すべてが正しく設定されていれば、プレイヤーは今すぐ発射できるようになります。

:test\_play: を押すか、 **F5** キーを押してテストプレイしてください。弾が発射され、タイルに当たると消えれば成功です！

* * *

## 🛠 トラブルシューティング

* * *

### ❌ **発射アニメーションが再生されない**

\u003e **Idle → Shoot** の遷移が正しく設定されているか、アニメーションが適切に設定されているか確認してください。

* * *

### ❌ **キャラクターが発射アニメーションのまま永遠に止まる**

\u003e **Shoot → Idle** の戻り遷移が正しく設定されていない可能性があります。

* * *

### ❌ **弾が発射されない**

- **Fire Bullet** アクションが正しく設定されているか確認してください。
- 以下を確認してください：
  - **弾データ** が割り当てられていること
  - **コネクタ** が設定されていること
  - コネクタが銃の **銃口** に正しく配置されていること

* * *

### ❌ **一度に発射できる弾が一つだけ**

\u003e **BulletSettings** で弾の制限が無限に設定されていない可能性があります。

* * *

### ❌ **弾が決して消えない**

\u003e `sample_bullet` のビジュアルスクリプトを確認してください。

- 以下を確認してください：
  - **Remove** ステートに正しい **RemoveSelf** アクションがあること
  - すべての **3 つの条件** が **AND** ではなく **OR** で接続されていること

* * *

## ➡ パート 2 へ進む

> [@Tutorial: Scripting Course #2 – Let's Create an Enemy](https://guild.rpgmakerofficial.com/t/topic/60?u=ggg-administrator):
>
> In this course, you will learn the basic scripting methods in ACTION GAME MAKER. In Part 2, we will create an enemy character. Preparation Before Starting the Course We will continue using the same…
