# チュートリアル：「ゼロから始めるACTION GAME MAKER」第4章

**URL:** <https://guild.rpgmakerofficial.com/t/topic/886>\
**Category:** チュートリアル\
**Tags:** tutorial, english\
**Created:** [2025 年 9 月 29 日午後 1:10 UTC](https://guild.rpgmakerofficial.com/t/topic/886 "2025-09-29T13:10:09Z")\
**Posts on this page:** 16\
**Page:** 1

<div class="post-metadata">

**Author:** ![Moonling](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/moonling/32/369_2.png) [@Moonling](https://guild.rpgmakerofficial.com/u/Moonling)\
**Post date:** [2025 年 9 月 29 日午後 1:10 UTC](https://guild.rpgmakerofficial.com/t/topic/886/1 "2025-09-29T13:10:09Z")

</div>

# 第4章：これを「ゲーム」にしよう

前章では、プレイヤーが弾を発射して敵を倒せるようにすることで、ゲームプレイの基礎を完成させました。

今章では、さらに進めて、実際に **ゲームとして遊べるプロジェクト** に仕上げていきます。

### ゲームにするために不足しているものは？

現在のバージョンでは、プレイヤーは移動でき、敵も存在しますが、いくつかの要素がまだ不足しています。

- ステージが小さすぎるため、拡大する必要があります。
- プレイヤーにはダメージ反応がありますが、実際に倒すことはできません。また、プレイヤーの残HPがわからないため、それを表示できるようにする必要があります。
- 最後に、ゲームに **ゴール** がありません。理想的にはボス戦を含めたいところですが、まずはシンプルにしましょう： **敵を5体倒せばゲームクリア** です。

### 完成例

[![](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/2X/b/b8dee6c3f4511baa7cc715713eb20f4d3e1644be.jpeg "「0からはじめるACTION GAME MAKER」第四章完成イメージ") ](https://www.youtube.com/watch?v=ukXQ-3fgrt0)

---

<div class="post-metadata">

**Author:** ![Moonling](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/moonling/32/369_2.png) [@Moonling](https://guild.rpgmakerofficial.com/u/Moonling)\
**Post date:** [2025 年 9 月 29 日午後 1:10 UTC](https://guild.rpgmakerofficial.com/t/topic/886/2 "2025-09-29T13:10:14Z")

</div>

非表示: 2025 年 9 月 29 日午後 1:10 UTC



---

<div class="post-metadata">

**Author:** ![Moonling](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/moonling/32/369_2.png) [@Moonling](https://guild.rpgmakerofficial.com/u/Moonling)\
**Post date:** [2025 年 9 月 29 日午後 1:14 UTC](https://guild.rpgmakerofficial.com/t/topic/886/3 "2025-09-29T13:14:43Z")

</div>

## ステージ1を拡張

まず、より多くのタイルを描画してステージを拡張しましょう。ステージが大きくなるため、プレイヤーが最終的にカメラの現在の範囲外に出てしまう可能性があります。そのため、カメラがプレイヤーを追跡するようにもする必要があります。

### より多くのタイルを描画する

タイルは**Base (TileMapLayer)** ノードを使用して作成されたため、このノードを使用してステージを拡張します。

1. **stage1** シーンタブに切り替えます。

2. シーンウィンドウで**Base (TileMapLayer)** ノードを選択します。

3. 下部のウィンドウで **TileMap** タブを開き、タイルを選択します。

4. 右側のスペースに自由にタイルを配置します。ステージのバランスを保つために：

十分なタイルを配置したら、次のステップに進みます。

---

<div class="post-metadata">

**Author:** ![Moonling](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/moonling/32/369_2.png) [@Moonling](https://guild.rpgmakerofficial.com/u/Moonling)\
**Post date:** [2025 年 9 月 29 日午後 1:20 UTC](https://guild.rpgmakerofficial.com/t/topic/886/4 "2025-09-29T13:20:15Z")

</div>

## プレイヤーにカメラを追従させる

**ACTION GAME MAKER** におけるカメラの追従は、 **Target ID** と呼ばれるシステムによって制御されます。プレイヤーを作成し、 **CameraTargetSettings** ノードを追加した際を覚えていますか？そのノードには **Target ID** というプロパティがあります。

カメラノードの **ZoomCamera2D** にも **Target ID** プロパティがあります。カメラとゲームオブジェクトの両方が同じTarget IDを共有している場合、カメラは自動的にそのオブジェクトを追従するように設計されています。

**ZoomCamera2D** とプレイヤーの **CameraTargetSettings** の両方のTarget IDを設定しましょう。

### InitialCamera (ZoomCamera2D) の Target ID を設定

1. **Stage1** シーンタブで、\*\*InitialCamera (ZoomCamera2D)\*\*ノードを選択します。

2. Inspectorで\*\*Target ID (Array…)\*\*プロパティを展開します。

3. **+ Add Element** ボタンをクリックします。

4. テキストフィールドが表示されます。プレースホルダーテキストの`<null>`を削除し、 **player** と入力します。

### プレイヤーの CameraTargetSettings ノードに Target ID を追加

1. **player** シーンタブに切り替えます。

2. **CameraTargetSettings** ノードを選択します。

3. Inspectorで **Target ID** フィールドに **player** と入力します。

### 拡張されたステージのテスト

これで拡張されたステージのプレイテストを行い、すべてが正しく機能しているか確認しましょう。プレイヤーをステージの右端まで動かしてみてください。

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

すべてが適切に設定されていれば、カメラはスムーズにプレイヤーを追従するはずです。

* * *

### チェックリスト

- **カメラが追従しない:** Stage1の **InitialCamera** とプレイヤーの **CameraTargetSettings** の両方でTarget ID設定を再確認してください。

- **ステージの最右端に到達できない:** \*\*Base (TileMapLayer)\*\*の穴のサイズや壁の高さを調整してください。

---

<div class="post-metadata">

**Author:** ![Moonling](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/moonling/32/369_2.png) [@Moonling](https://guild.rpgmakerofficial.com/u/Moonling)\
**Post date:** [2025 年 9 月 29 日午後 1:24 UTC](https://guild.rpgmakerofficial.com/t/topic/886/5 "2025-09-29T13:24:03Z")

</div>

## プレイヤーに「死亡」エフェクトを追加：パーティクルの作成

敵と同様に、プレイヤーの HP が 0 になったときも敗北させる必要があります。死亡アニメーションに適したフレームがないため、 **パーティクル** を使用して視覚的なエフェクトを作成しましょう。

### パーティクルとは？

パーティクルは、本質的に **大量に散らばった小さな画像** で、エフェクトを表現するものです。例えば、紙吹雪を想像するとわかりやすいでしょう。パーティクルを使えば、各「破片」の外観や動きを自由に調整できます。

**Godot Engine** では、通常 **GPUParticle2D** や **CPUParticle2D** などのノードを使用します。  
**ACTION GAME MAKER** では、 **ParticleObject** ノードを使用してパーティクルを処理します。

**ParticleObject** には、すぐに使用できる **20 種類以上のパーティクルテンプレート** が用意されています。

* * *

### パーティクルオブジェクトの作成

パーティクルオブジェクトの作成は、ゲームオブジェクトを作成するのと全く同じです。

1. **新しいシーンタブ** を作成します。

2. ルートノードとして **GameObject** を選択します。

3. **オブジェクト名** を `DeathParticle` に設定し、 **テンプレート** を **particles** に選択して、 **作成** をクリックします。

4. シーンウィンドウで、新しく作成された **DeathParticle** ノードを選択します。

5. インスペクターで、 **パーティクルテンプレート** を **None** から **Fireworks** に変更します。

6. **GPUParticles2D** ノードが自動的に追加されます。

7. GPUParticles2D のインスペクターで、 **Emitting** プロパティにチェックを入れます。これによりパーティクルの放出が有効になります。

8. これでシーンビューにパーティクルが放出され、花火のようなエフェクトが表示されるはずです。  
最後に、`[未保存](*)` タブを右クリックして、シーンを **deathparticle.tscn** として保存します。

---

<div class="post-metadata">

**Author:** ![Moonling](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/moonling/32/369_2.png) [@Moonling](https://guild.rpgmakerofficial.com/u/Moonling)\
**Post date:** [2025 年 9 月 29 日午後 1:38 UTC](https://guild.rpgmakerofficial.com/t/topic/886/6 "2025-09-29T13:38:48Z")

</div>

## プレイヤーのビジュアルスクリプトに「Death」状態を追加する

### 「Death」状態の検討

プレイヤーの HP が 0 になると、移動を停止し、「Death Particle」エフェクトを発生させる必要があります。  
この状態は **AnyState** から接続するのが妥当ですが、一つ問題があります。

現在、以下に示すように、プレイヤーは状態に関係なく敵の攻撃に衝突すると、常に **Take Damage** 状態に遷移してしまいます。

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

HP = 0 はプレイヤーがすでに攻撃を受けたことを意味するため、「Death」状態にある間にも **Take Damage** 状態に遷移してしまう可能性があります。

これを修正するため、ダメージ遷移に「 **HP が 0 ではない** 」という条件を追加し、プレイヤーがすでに死亡している場合に発動しないようにします。

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

* * *

### 「Death」状態の作成

完全に一致するアニメーションがないため、 **Damage** アニメーションを再利用します。ただし、視覚的に区別しやすくするため、プレイヤーが倒されたことが明確になるように **Filter** エフェクトも使用します。

1. **Player** シーンを開きます。

2. エディタを **2D** から **Script** に切り替えます。

3. **Take Damage** 状態の上部領域で右クリックし、 **Add State** を選択します。

4. 新しい状態の名前を **Death** に変更します。

5. **Animation** を **DamageTaken** に設定します。

6. **Action Settings** セクションを展開します。

7. **Ignore Movement Input** を有効にします。

8. **＋ Add Executable Action** をクリックします。

9. **DisplayParticle** を選択します。

10. Particle Object path フィールドで📃アイコンをクリックし、以前作成した **DeathParticle.tscn** を選択します。

11. **Add** をクリックします。

12. 再度、 **＋ Add Executable Action** をクリックします。

13. **ApplyObjectFilter** を選択します。

14. **Filter Type** を **Transparent** に、 **Finish Time** を **3.0 秒** に設定します。これにより、プレイヤーは 3 秒かけて徐々にフェードアウトします。

15. **Add** をクリックします。

16. Actions リストが正しい場合、「Death」状態の準備は完了です。

* * *

### AnyState と「Death」状態のリンク

1. **AnyState** を右クリック → **Add Link** → **Death** に接続します。

2. **＋ Add Other Condition** をクリックします。

3. **HPIsZero** を選択し、 **Add** をクリックします。

* * *

### 「Damage」遷移への条件追加

最後に、HP がすでに 0 の場合に **Take Damage** 遷移が発動しないようにする必要があります。これには **Is Reversed** オプションを有効にします。

1. **AnyState → Take Damage** のリンクを選択します。

2. **＋ Add Condition** をクリックします。

3. **HPIsZero** を選択します。

4. **Is Reversed** を有効にします。これにより条件が「 **HP が 0 ではない** 」に変更されます。

5. Other Conditions パネルに逆転条件（≠ アイコンがハイライト）が表示されていれば、設定は正しいです。

* * *

### 「Death」状態のテスト

実際にテストしてみましょう。プレイヤーの初期 HP は 1 に設定されているため、敵の攻撃を 1 回受けるだけで Death 状態に入ります。

設定が正しければ以下のようになります。

- 攻撃を受けると **Death Particle** エフェクトが表示されます。

- プレイヤーは徐々にフェードアウトします。

- 倒れた後、 **F5** を押してゲームをリセットします。

* * *

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

- **パーティクルが表示されない:**  **DeathParticle.tscn** と **DisplayParticle** アクションを確認してください。

- **プレイヤーがフェードアウトしない:**  **ApplyObjectFilter** アクションの設定を確認してください。

- **死亡後もダメージ反応が発動する:** リンク条件と **TakeDamage** 遷移の逆転条件を再確認してください。

---

<div class="post-metadata">

**Author:** ![Moonling](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/moonling/32/369_2.png) [@Moonling](https://guild.rpgmakerofficial.com/u/Moonling)\
**Post date:** [2025 年 9 月 29 日午後 1:46 UTC](https://guild.rpgmakerofficial.com/t/topic/886/7 "2025-09-29T13:46:12Z")

</div>

## HP バーの作成

現在、1 回の攻撃で倒されてしまうのは厳しすぎるため、プレイヤーの HP を増加させましょう。  
ただし、プレイヤーの HP が増えるということは、残量を表示する仕組みも必要になります。そのために、 **HP バー** を作成します。

**ACTION GAME MAKER** では、 **SimpleGauge** または **ImageGauge** ノードを使用してゲージを表示できます。このチュートリアルでは **SimpleGauge** を使用します。

カメラがプレイヤーに追従するようになったため、HP バーをプレイヤーと同じレイヤーに配置すると、画面外に移動して見えなくなってしまう可能性があります。HP バーのように常に表示しておく必要がある要素には、 **UI レイヤー** を使用してください。

* * *

### UI レイヤーについて

以前にも触れた通り、 **ACTION GAME MAKER のレイヤー** は以下のようになっています。 **UI レイヤー** と **スクリーンエフェクトレイヤー** は、カメラの影響を受けない_特別なレイヤー_です。

 ![アートボード 1](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/2X/4/45a726dce1cd31af612e801183810c3ced54a98c.png)

つまり、UI レイヤーに配置されたものは常に表示され続けるため、HP バーには最適です。一方、スクリーンエフェクトレイヤーはアクションによってトリガーされる特殊効果用に予約されているため、ここでは UI レイヤーを使用します。

* * *

### プレイヤーの HP と最大 HP を 10 に設定

1. プレイヤーの **BaseSettings** ノードを選択します。

2. インスペクターで、 **HP** と **Max HP** の両方の値を `1` から`10`に変更します。

* * *

### SimpleGauge ノードの追加と設定

1. **stage1** シーンタブに切り替え、エディタ表示を **Script** から **2D** に戻します。

2. **UI** ノードを選択します。

3. シーンウィンドウの左上にある\*\*＋（子ノードを追加）\*\*ボタンをクリックします。

4. **SimpleGauge** を選択し、 **作成** をクリックします。

5. サイズを調整します。最初は潰れたように表示されます。

6. 橙色のハンドルをドラッグして、適切なサイズに拡大します（チュートリアルの参考画像を参照）。

7. UI レイヤーの表示範囲は細い青い線でマークされています。ゲージをこの境界内の **左上** に移動させます。

8. 次に、ゲージをプレイヤーの HP にリンクします。インスペクターで **変数タイプ** を **オブジェクト** に設定します。

9. 新しいプロパティ **ターゲットオブジェクトパスを指定** が表示されます。📃 アイコンをクリックします。

10. **player.tscn** を選択し、 **開く** をクリックします。

11. **変数名** フィールドに自動的に **hp** が表示されるはずです。これは現在の値として使用する変数を指定するもので、そのままにしておきます。

12. **変数を最大値として使用** チェックボックスを有効にします。

13. 手順 9〜10 を繰り返して、再度 **player.tscn** を指定します。

14. 最大値変数フィールドでは、デフォルトで **object\_id** になっている場合があります。これを **max\_hp** に変更します。これにより、ゲージはプレイヤーの最大 HP を最大値として使用することが指定されます。

* * *

### HP バーのテスト

**テストプレイ** ボタンをクリックしてゲームを実行します。設定が正しければ：

- HP バーが画面の左上に表示されます。

- プレイヤーがダメージを受けると、HP バーがそれに応じて減少します。

* * *

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

- **ゲージが表示されない:** SimpleGauge が **UI レイヤー** の子ノードであり、青い境界線内に配置されていることを確認してください。

- **HP が低い値から始まる:** BaseSettings でプレイヤーの **HP** が `10` に設定されているか再確認してください。

- **最大 HP があるのに HP が即座に 0 になる:** BaseSettings で **Max HP** が `10` に設定されていること、および SimpleGauge の **最大値変数** が正しく`max_hp` に設定されていることを確認してください。

---

<div class="post-metadata">

**Author:** ![Moonling](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/moonling/32/369_2.png) [@Moonling](https://guild.rpgmakerofficial.com/u/Moonling)\
**Post date:** [2025 年 9 月 29 日午後 1:51 UTC](https://guild.rpgmakerofficial.com/t/topic/886/8 "2025-09-29T13:51:54Z")

</div>

## 「落下死」の設定

テストプレイ中に、プレイヤーが穴に落ちると無限に落下し続けることに気づかれたかもしれません。これを修正し、プレイヤーが穴に落ちた際に「敗北」状態になるように設定しましょう。

解決策は、カメラが無限に下へ追いかけるのを防ぐために **カメラの移動範囲を制限** し、プレイヤーがカメラの範囲外に出た際に\*\*「Death（死亡）」\*\*状態に移行させることです。

* * *

### InitialCamera（ZoomCamera2D）の移動範囲を制限する

1. **InitialCamera** ノードを選択します。

2. インスペクターで、 **Limits（制限）** セクションを展開します。

3. **Bottom（下限）** の値を `10000000` から `500` に変更します。

4. テストプレイを実行します。

* * *

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

- **カメラに何も表示されない場合:**  
タイルが原点（赤と緑の軸の交点）からオフセットされている可能性があります。カメラの下限値を `1000` や `2000` などに調整し、適切に揃うまで試してください。

* * *

### プレイヤーのビジュアルスクリプトに「落下敗北」を追加する

すでに\*\*「Death」 **状態が存在するため、既存のリンクに新しい条件** 「OffScreen（画面外）」\*\*を追加するだけです。

1. **Player** シーンに切り替え、エディタの表示を\*\*Script（スクリプト）\*\*に変更します。

2. **AnyState → Death** のリンクを選択します。

3. **＋ Add Condition（条件を追加）** をクリックします。

4. 条件として **OffScreen** を選択します。

5. **Data Type（データ型）** を _Unset（未設定）_ から **This Node（このノード）** に変更します。

6. **Connection With Previous Condition（前の条件との接続）** を **OR** に設定し、追加します。

7. 条件リストが正しく以下のように表示されていることを確認します。

* * *

### 落下死のテスト

テストプレイを実行し、穴に落ちます。  
正しく設定されていれば、プレイヤーがカメラの範囲外に出た際に花火のパーティクルエフェクトが再生され、敗北を示します。

* * *

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

- **落下敗北が発動しない場合:**  
**AnyState → Death** リンク上の条件を確認してください。 **HP = 0 OR OffScreen** となっていることを確認します。

---

<div class="post-metadata">

**Author:** ![Moonling](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/moonling/32/369_2.png) [@Moonling](https://guild.rpgmakerofficial.com/u/Moonling)\
**Post date:** [2025 年 9 月 29 日午後 1:54 UTC](https://guild.rpgmakerofficial.com/t/topic/886/9 "2025-09-29T13:54:10Z")

</div>

## 「5 体の敵を倒してゲームクリア」について：変数の扱い

**5** という数値からカウントダウンする方法が必要です。敵が倒されるたびにこの数値は減少し、 **0** になった時点でゲームクリアイベントが発動するようにします。これを実現するために、 **変数** と呼ばれるものを使用します。

* * *

### 変数とは何か

**変数** とは、値を格納するコンテナのようなものです。例えば、以前扱ったプレイヤーの HP（体力）も実際には変数です。プレイヤーが敵の攻撃を受けると、HP コンテナ内の値が 1 減少します。

**ACTION GAME MAKER** では、変数を定義する主な方法が 2 つあります。

1. オブジェクト上の **VariableSettings** ノードを使用する方法。
2. プロジェクト全体で使える **Project Variables** データベースを使用する方法。

以前使用した HP は、前者のタイプの例です。

* * *

### オブジェクト変数とプロジェクト変数の違い

- **オブジェクト変数（VariableSettings）** : 特定のオブジェクトに紐付いた変数です。オブジェクトが削除されると、変数も消滅します。
- **プロジェクト変数** : プロジェクト内のどこからでもアクセスできるグローバル変数です。プロジェクトが実行されている限り利用可能であり、セーブデータなどの用途に適しています。

実際の使い分けは以下の通りです。

- **HP、攻撃力、ジャンプ力** → **オブジェクト変数** として扱うのが最適です。
- **ハイスコア、コイン数、ライフ数** → 複数のステージをまたいで維持され、ゲーム全体で共有される必要があるため、 **プロジェクト変数** として扱うのが最適です。

* * *

### 「残敵数」をどの変数で管理するか

技術的にはどちらの変数タイプでも機能しますが、複数のオブジェクト（敵たち）がこの数値と相互作用するため、 **プロジェクト変数** を使用します。

したがって、処理の流れは以下のようになります。

- 敵が\*\*「消滅」\*\*状態に入ると → 「残敵数」を 1 減らす。
- 「残敵数」が **0** に達すると → ゲームクリアシーケンスを発動させる。

* * *

### クリアシーケンスの実装方法

キル数を管理するための専用の **ゲームオブジェクト** を作成します。このオブジェクトは常に表示されるように **UI レイヤー** に配置します。HP バーと同様に、倒された敵の数を表示し、プレイヤーにクリアまであと何体残っているか知らせます。

手順は以下の通りです。

1. **プロジェクト変数** 「残敵数」を作成する。
2. **敵の「消滅」状態** に、キル数を減らすアクションを追加する。
3. 「残敵数」を監視し、0 に達したときにクリアシーケンスを発動させる **クリアイベントオブジェクト** を UI レイヤーに作成する。

---

<div class="post-metadata">

**Author:** ![Moonling](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/moonling/32/369_2.png) [@Moonling](https://guild.rpgmakerofficial.com/u/Moonling)\
**Post date:** [2025 年 9 月 29 日午後 1:57 UTC](https://guild.rpgmakerofficial.com/t/topic/886/10 "2025-09-29T13:57:59Z")

</div>

## 「残りの敵」をプロジェクト変数として追加する

プロジェクト変数は **データベース** 内にあります。今すぐ追加しましょう。

1. 左上のメニューにある **データベース** ボタンをクリックします。

2. **データ管理** という新しいウィンドウが開きます。

3. **ユーザーデータベース** タブから **プロジェクト変数** タブに切り替えます。

4. ウィンドウの左上にある **＋** ボタンをクリックします。

5. 下部に **variables1** という名前の新しい行が表示されます。これを **Remaining Enemies** に名前変更します。

6. **値** を **5.0** に設定します。プレイヤーに5体の敵を倒してもらうためです。

7. **OK** をクリックしてウィンドウを閉じます。設定は完了です。

---

<div class="post-metadata">

**Author:** ![Moonling](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/moonling/32/369_2.png) [@Moonling](https://guild.rpgmakerofficial.com/u/Moonling)\
**Post date:** [2025 年 9 月 29 日午後 2:00 UTC](https://guild.rpgmakerofficial.com/t/topic/886/11 "2025-09-29T14:00:42Z")

</div>

## 敵の「消滅」状態にアクションを追加する

**ACTION GAME MAKER** では、 **プロパティの変更** アクションを使用して変数を修正します。  
基本的な四則演算（加算、減算、乗算、除算）を実行できるため、ロジックは\*\*「残りの敵数 -= 1」\*\*として実装できます。

1. **敵** シーンタブを開き、エディタビューを **スクリプト** に切り替えます。

2. **消滅** 状態を選択し、 **実行可能アクションを追加** をクリックします。

3. **ChangeObjectProperty** を選択します。

4. 以下の通りフィールドを設定します。

5. 最後に、実行順序を並べ替えます。アクションは **上から下へ** 実行されるため、 **消滅** が **プロパティの変更** より先に実行されると、変数は更新されません。

* * *

### なぜ `-=` を使うのか、単に `-` ではダメなのか？

プログラミングにおいて、`-=` は以下の意味を持つ短縮演算子です。

> **new\_value = previous\_value - 1**

これは、 **減算** と **結果を変数に代入する** という2つの処理を1ステップで行います。  
もし `=` がない単なる `-`（マイナス）だけを使用すると、結果を **どこに保存するか** が指定されないため、実際には変数は変更されません。

---

<div class="post-metadata">

**Author:** ![Moonling](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/moonling/32/369_2.png) [@Moonling](https://guild.rpgmakerofficial.com/u/Moonling)\
**Post date:** [2025 年 9 月 29 日午後 2:03 UTC](https://guild.rpgmakerofficial.com/t/topic/886/12 "2025-09-29T14:03:35Z")

</div>

## UI オブジェクト「残りの敵マネージャー」を作成する

残りの敵変数を管理するための UI オブジェクトを作成します。

このオブジェクトは、「 **残りの敵** 」の現在の値を **表示** し、値が 0 に達したときに **クリアシーケンスをトリガー** します。明確にするために、敵のアイコン（ **Sprite2D** 経由）を表示し、アクションを使用してその隣に **残りの敵** 変数を表示します。敵のアイコンには、既存の **敵スプライト画像** をそのまま再利用できます。

1. エディタビューを **2D** に切り替えます。

2. **新しいシーンタブ** を開き、ルートノードとして **GameObject** を選択します。

3. **オブジェクト名** を `RemainingEnemiesManager` に設定し、 **テンプレート** を `UI`、 **タイプ** を `Empty` に選択してから、 **作成** をクリックします。

4. 新しく作成したシーンを保存します。

5. **ファイルシステム** から、敵で使用されているスプライトである **enemy.png** を、エディタビュー内の **原点の左側** （赤と緑の軸が交差する場所）の空のスペースにドラッグします。

6. **Enemy** という名前の **Sprite2D** が自動的に追加されます。Godot では、画像ファイルをエディタビューポートに直接ドロップすると、 **Sprite2D** ノードが自動的に作成され、テクスチャが割り当てられます。

---

<div class="post-metadata">

**Author:** ![Moonling](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/moonling/32/369_2.png) [@Moonling](https://guild.rpgmakerofficial.com/u/Moonling)\
**Post date:** [2025 年 9 月 29 日午後 2:10 UTC](https://guild.rpgmakerofficial.com/t/topic/886/13 "2025-09-29T14:10:34Z")

</div>

## 「残存敵管理」ビジュアルスクリプトの設定（変数の表示）

まず、 **変数の表示** に焦点を当てます。単一の状態\*\*「Count」 **だけで、** 「残存敵」\*\*変数の値を表示すれば十分です。

変数を表示するには、 **DisplayText** アクションを使用します。

### 「Count」状態の作成

1. Sceneウィンドウで\*\*RemainingEnemiesManager (Game Object)\*\*ノードを選択し、\*\*📃+ (スクリプトの添付)\*\*をクリックします。

2. **RemainingEnemiesManager.vs** を作成します。

3. デフォルトの **State001** を **Count** にリネームします。

4. **DisplayText** 実行アクションを追加し、 **Basic Settings** を以下のように設定します。

5. **Layout & Action** セクションを以下のように設定します。

**注：DisplayTextアクションにおける配置について**  
このアクションは、指定されたサイズのテキストボックスを **基準点を中心に** 作成し、選択した期間、その中に指定されたテキスト（変数）を表示します。  
基準点が\*\*「このオブジェクトの中心」 **の場合、それは** 原点\*\*（赤と緑の軸が交差する点）を意味します。  
今回の設定では、原点を中心に **80×80 px** のテキストボックスを作成し、テキストを **中央** に配置し、表示期間を **無制限** に設定しています。

* * *

## 「Count」表示のテスト

シーンに配置してテストしましょう。常に表示されるようにするため、 **UIレイヤー** に配置します。

1. **stage1** シーンタブに切り替え、エディタを **2D** に変更します。

2. **UI (CanvasLayer)下のSimpleGauge**ノードを選択します。

3. FileSystemで **RemainingEnemiesManager.tscn** を選択し、 **UIレイヤーの青い枠内** の **右上** エリアにドラッグ＆ドロップします。

4. テストプレイを実行し、以下を確認します。

* * *

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

- **アイコンも数値も表示されない:**  
オブジェクトが **UIレイヤーの子** であり、 **青い枠** （UI表示領域）内に配置されていることを確認してください。

- **アイコンは表示されるが数値が表示されない:**  
残存敵マネージャーオブジェクト内で、アイコンが **原点の近く** に配置されていることを確認し、 **Count** 状態の **DisplayText** アクション設定を再確認してください。

- **敵を倒しても数値が変化しない:**  
敵オブジェクトの **Vanish** 状態で、実行順序が **まずプロパティの変更** 、次に **自身を削除** になっていることを確認してください。

---

<div class="post-metadata">

**Author:** ![Moonling](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/moonling/32/369_2.png) [@Moonling](https://guild.rpgmakerofficial.com/u/Moonling)\
**Post date:** [2025 年 9 月 29 日午後 2:20 UTC](https://guild.rpgmakerofficial.com/t/topic/886/14 "2025-09-29T14:20:22Z")

</div>

## クリアシーケンスの作成

次に、 **クリアシーケンス** を作成します。これにも **DisplayText** アクションを使用します。

画面の中央に\*\*「STAGE CLEAR」**を大きく表示し、正式なクリアの雰囲気を出します。  
遷移条件は、残り敵数変数が**0\*\*に達したときとします。

### 「ステージクリア」ステートの設定

1. **RemainingEnemiesManager** シーンタブに切り替え、エディタビューを **Script** に変更します。

2. **Count** ステートの近くで、 **Add State** （ステート追加）をクリックします。

3. 新規ステートを **Stage Clear** にリネームします。

4. **＋ Add Executable Action** （実行可能アクションの追加）をクリックします。

5. **DisplayText** を選択します。

6. 以下のように設定します（項目が多いので、一つずつ確認してください）：

\u003e **「Use Scene as Base（シーンを基準として使用）」とは何ですか？**  
\u003e このオブジェクトの位置ではなく、表示は **ゲームシーン全体** （つまり、カメラで表示されている領域）にアンカーされます。この設定では、テキストボックス（1200×120）がシーンの中央に配置され、 **STAGE CLEAR** がそのボックス内で中央揃えされます。

1. **Count** ステートを右クリック → **Add Link** （リンク追加）を選択し、 **Stage Clear** に接続します。

2. **＋ Add Condition** （条件追加）をクリックします。

3. **SwitchVariableChanged** （変数切り替え）を選択します。

4. 条件を設定します：

* * *

## クリアシーケンスのテスト

まず、敵を十分に配置します（合計 **5体** ）し、クリアシーケンスが正しくトリガーされるかテストします。

1. **stage1** シーンタブに切り替え、エディタビューを **2D** に設定します。

2. **BaseLayer** の下で、配置の準備として **enemy** や **player** などの子ノードを選択します。

3. **FileSystem** から **enemy.tscn** をステージにドラッグして、敵をもう1体配置します。

4. **enemy5** が配置されるまで、手順 **1–3** を繰り返します。

5. テストプレイを開始します。

* * *

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

- **「配置した5体の敵が表示されない」:**  
画面外に落ちてしまっている可能性があります。各敵が **固形地面** の上に配置されていることを確認し、 **Template Move** で **Don’t fall off ledges** （崖から落ちない）が有効になっているか確認してください。

- **「カウントが0になっても何も起こらない」:**  
**Stage Clear** ステートの **DisplayText** 設定を確認し、リンクの遷移条件（プロジェクト変数 **Remaining Enemies** が`0`に等しい）が正しいか確認してください。

---

<div class="post-metadata">

**Author:** ![Moonling](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/moonling/32/369_2.png) [@Moonling](https://guild.rpgmakerofficial.com/u/Moonling)\
**Post date:** [2025 年 9 月 29 日午後 2:21 UTC](https://guild.rpgmakerofficial.com/t/topic/886/15 "2025-09-29T14:21:12Z")

</div>

## 第4章の振り返り

この章では、ゲームが正式なゲームとして機能するようにするための **カメラ追従メカニクス** 、 **パーティクル** 、 **UI** 、および **変数** について学びました。

しかし、現状ではプレゼンテーションは依然として非常に地味で、音もありません。

次の章である第5章では、 **サウンド設定** や **背景設定** を追加し、ついにプロジェクトをエクスポートして誰でもプレイできるようにすることで、ゲームの完成度を高めます。

> [@Tutorial: “Getting Started with ACTION GAME MAKER from Zero” – Chapter 5](https://guild.rpgmakerofficial.com/t/topic/887?u=moonling):
>
> Chapter 5: Enhance the Presentation and Export the Game In this chapter, we’ll cover how to polish up the presentation of the completed game and make it playable on PC. Think About What’s Missing in…

---

<div class="post-metadata">

**Author:** ![Moonling](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/moonling/32/369_2.png) [@Moonling](https://guild.rpgmakerofficial.com/u/Moonling)\
**Post date:** [2025 年 9 月 29 日午後 3:23 UTC](https://guild.rpgmakerofficial.com/t/topic/886/16 "2025-09-29T15:23:24Z")

</div>

表示: 2025 年 9 月 29 日午後 3:23 UTC


