2Dゲーム制作

【初心者向け】Unityで2Dキャラにダメージ処理を実装しよう|ライフとリトライの基本

はじめに

前回の記事では、敵キャラの動きとプレイヤーとの接触判定を実装しました。
今回は、プレイヤーが敵に接触したときに「ライフを減らす」処理や「ゲームオーバーの判定」を追加して、ゲームらしさをさらに高めていきます。


1. ライフの管理変数を追加

まずはプレイヤーにライフの概念を追加します。PlayerController.cs に以下のような変数を追加しましょう:

public int life = 3;
private float damageCooldown = 1.0f;
private float lastDamageTime = -1.0f;
  • life はプレイヤーの残りライフ
  • damageCooldown はダメージを受けた後のクールタイム(秒数)
  • lastDamageTime は最後にダメージを受けた時間です

2. 接触時のダメージ処理を追加

既存の OnCollisionEnter2D を以下のように拡張します:

void OnCollisionEnter2D(Collision2D collision)
{
    if (collision.gameObject.layer == LayerMask.NameToLayer("Ground"))
    {
        isGrounded = true;
    }
    else if (collision.gameObject.CompareTag("Enemy"))
    {
        if (Time.time - lastDamageTime > damageCooldown)
        {
            life--;
            lastDamageTime = Time.time;
            Debug.Log("敵に当たった!ライフ: " + life);

            if (life <= 0)
            {
                Debug.Log("ゲームオーバー!");
                UnityEngine.SceneManagement.SceneManager.LoadScene(UnityEngine.SceneManagement.SceneManager.GetActiveScene().name);
            }
        }
    }
}
  • SceneManager を使うには
    using UnityEngine.SceneManagement;
    をスクリプトの上部に追加してください

3. 実行して確認しよう

  • 敵に当たるたびにライフが減っていくか
  • ライフが0になるとシーンがリスタートされるか

4. まとめ

今回の実装で、ゲームに失敗の概念が加わり、プレイヤーに緊張感が生まれました。
次回は「敵を倒す」「スコアの表示」など、よりゲーム性を高める機能にチャレンジしていきましょう!