実践ガイド

【Godot 4.7】Brotato風ゲームの敵ウェーブ・HP・ゲームオーバーをまとめて作る

【Godot 4.7】Brotato風ゲームの敵ウェーブ・HP・ゲームオーバーをまとめて作るのアイキャッチ

敵が時間とともに強くなり、プレイヤーがダメージを受け、回復し、ゲームオーバーから再開するまでを一つの流れにします。値を各ノードへ散らさず、敵の強さはウェーブ、プレイヤーの生存状態はPlayerへ集約します。

ウェーブから敵の現在値を作る

Enemyの初期HPや速度を固定値のまま使わず、Mainからウェーブ番号を渡して現在値を計算します。たとえば、ウェーブが進むほどHPと移動速度を少しずつ増やし、移動速度に上限を設けます。この例ではHPはウェーブに応じて増え続けるため、必要に応じてHPにも上限を設定します。

func setup_for_wave(wave: int) -> void:
    max_hp = base_hp + (wave - 1) * hp_step
    hp = max_hp
    move_speed = min(base_speed + (wave - 1) * speed_step, speed_cap)

敵の移動処理は「base_speed」ではなく「move_speed」を使います。設定値を変更したのにゲーム中の速度が変わらない場合、移動側が古い固定値を参照していないかを確認します。

接触ダメージをPlayerへ集める

敵がPlayerのHPを直接書き換えるのではなく、敵は「player.take_damage(damage)」を呼びます。Player側で無敵時間、HP減少、ゲームオーバー判定を行うと、敵の種類が増えても生存処理を統一できます。

func take_damage(amount: int) -> void:
    if hp <= 0 or invincible_time > 0.0:
        return
    hp -= amount
    invincible_time = damage_cooldown
    hp_changed.emit(hp, max_hp)
    if hp <= 0:
        died.emit()

毎フレーム無敵時間を減らし、0以下の間だけ再びダメージを受けられるようにします。無敵時間がないと、同じ敵との接触中に毎フレームHPが減り、意図せず即死します。

回復アイテムを能力値へつなぐ

敵撃破時にRecoveryItemを生成し、Playerが拾ったら「recover(recovery_amount)」を呼びます。回復量はアイテム側に固定せずPlayerの能力値から取得します。これで、レベルアップの回復量アップがすべての回復アイテムへ反映されます。HPが満タンのときは拾わない設計にすると、回復アイテムを無駄に消費しません。

ゲームオーバーとリスタート

HPが0になったら、敵生成と攻撃を止め、HUDのゲームオーバーパネルを表示します。リスタートは各変数を手動で初期化せず、現在のシーンを再読み込みします。初期化漏れが少なく、敵・弾・タイマーもまとめて初期状態へ戻せます。

ニューゲームは確認後に保存を消す

ニューゲームボタンはすぐに保存ファイルを削除せず、ConfirmationDialogを開くだけにします。確定後に現在のスロットを削除し、成功したらシーンを再読み込みします。確認画面には現在のレベル、主要能力値、強化回数を表示すると、削除対象を把握できます。

動作確認

  • ウェーブが進むと敵のHP・速度が変わる
  • 接触でHPが減り、短時間の連続ダメージが抑えられる
  • 回復アイテムを拾うと現在の回復量でHPが戻る
  • HP 0で攻撃・敵生成が止まり、ゲームオーバー画面が出る
  • リスタートで敵、弾、タイマー、Playerが初期化される
  • ニューゲームは確認後だけ保存を削除する

まとめ

ウェーブ、Playerの生存状態、回復、ゲームオーバー、再開を分けて管理すると、ゲームの流れを拡張しやすくなります。次は、プレイ状態を複数のセーブスロットへ保存します。

統合版プロジェクトとの対応

統合版プロジェクトはこの記事の一部と異なります。敵の移動速度には上限がなく、回復アイテムは敵撃破時に20%の確率で出現し、HP満タン時も消費します。ニューゲーム確定時はスロット削除の成否を確認せずシーンを再読み込みするため、失敗時に中止する処理は別途必要です。

統合版には後続記事の機能も含まれます。記事の機能を確認するときは該当する操作を先に試し、最後にGodot 4.7でF5起動、入力、セーブ・ロード、再起動後の復元を確認してください。

← 記事一覧・検索