はじめに
前回の記事では、敵キャラの動きとプレイヤーとの接触判定を実装しました。
今回は、プレイヤーが敵に接触したときに「ライフを減らす」処理や「ゲームオーバーの判定」を追加して、ゲームらしさをさらに高めていきます。
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. まとめ
今回の実装で、ゲームに失敗の概念が加わり、プレイヤーに緊張感が生まれました。
次回は「敵を倒す」「スコアの表示」など、よりゲーム性を高める機能にチャレンジしていきましょう!