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

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

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

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

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

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

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

完成例

ステージ1を拡張

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

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

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

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

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

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

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

    • 空中のプラットフォームや壁は4タイルより高くならないようにします。

    • 隙間や穴は、簡単に飛び越えられるように4タイル幅以下にします。

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

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

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と入力します。

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

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

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


チェックリスト

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

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

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

敵と同様に、プレイヤーの 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として保存します。

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

「Death」状態の検討

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

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

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

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


「Death」状態の作成

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

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

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

    image

  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 フィールドで:page_with_curl:アイコンをクリックし、以前作成した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遷移の逆転条件を再確認してください。

HP バーの作成

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

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

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


UI レイヤーについて

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

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


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

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

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


SimpleGauge ノードの追加と設定

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

    image

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

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

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

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

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

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

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

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

  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 に設定されていることを確認してください。

「落下死」の設定

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

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


InitialCamera(ZoomCamera2D)の移動範囲を制限する

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

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

  3. Bottom(下限) の値を 10000000 から 500 に変更します。

    • これにより、カメラは赤い原点線から下へ 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 となっていることを確認します。

「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 レイヤーに作成する。

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

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

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

    image

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

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

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

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

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

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

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

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

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

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

  3. ChangeObjectPropertyを選択します。

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

    • 対象オブジェクトタイプ: プロジェクトデータベース

    • データベースタイプ: プロジェクト変数

    • レコード名: 残りの敵数

    • 式: -=

    • 定数値: 1

    設定すべきフィールドは5つあります。それぞれを再確認してください。
    このアクションにより、プロジェクト変数残りの敵数が1減ります。

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

    • Change Propertyの横にあるハンバーガー(3本線の)アイコンをドラッグして上に移動させ、Change Propertyが最初に実行されるようにします。


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

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

new_value = previous_value - 1

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

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

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

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

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

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

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

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

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

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

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

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

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

「Count」状態の作成

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

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

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

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

    • Text Type: Variable

    • Variable Source: Data Management

    • Database Type: Project Variables

    • Record Name: Remaining Enemies

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

    • Unlimited Duration: On

    • Font: New SystemFont

    • Font Size: 64

    • Display Size: x = 80, y = 80

    • Margins (Top/Left/Right/Bottom): すべて 0

    • Horizontal Alignment: Center

    • Vertical Alignment: Center

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


「Count」表示のテスト

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

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

    image

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

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

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

    • 開始時にRemaining Enemies = 5が正しく表示される。

    • 敵を倒した後、数が4に減少する。


トラブルシューティング

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

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

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

クリアシーケンスの作成

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

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

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

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

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

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

  4. + Add Executable Action(実行可能アクションの追加)をクリックします。

  5. DisplayTextを選択します。

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

    • Text Body(テキスト本文): STAGE CLEAR

    • Unlimited Duration(無制限の継続時間): On(有効)

    • Font(フォント): New SystemFont

    • Font Size(フォントサイズ): 96

    • Display Area(表示領域): x = 1200, y = 120

    • Horizontal Alignment(水平配置): Center(中央揃え)

    • Vertical Alignment(垂直配置): Center(中央揃え)

    • Reference Point(基準点): Use Scene as Base(シーンを基準として使用)

    • Anchor(アンカー): Center(中央)

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

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

  2. + Add Condition(条件追加)をクリックします。

  3. SwitchVariableChanged(変数切り替え)を選択します。

  4. 条件を設定します:

    • Variable Type(変数タイプ): Variable(変数)

    • Target Type(ターゲットタイプ): Project Variable(プロジェクト変数)

    • Database Record Name(データベースレコード名): Remaining Enemies(残り敵数)

    • Variable Condition(変数条件): =
      (これにより、Remaining Enemies == 0のときに遷移が発生します。)


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

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

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

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

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

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

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

    • すべて正しく設定されていれば、すべての敵を倒した際にSTAGE CLEARが表示されます。


トラブルシューティング

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

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

第4章の振り返り

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

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

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