【Unity自己流メモ#4】プレイヤーのHPを管理するコード

今回はプレイヤーのHPを管理するコードをメモ。

このコードが書けるようになると例えば、

「敵キャラに当たった時にHPを減らす」といったように割とよく使う場面で活躍するかなと思います。

↓のコードはからのオブジェクトにアタッチしましょう。すなわち、まず初めに空のオブジェクトを作成しておいてください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;//ライフの画像(ハートの画像など)を使うときは、必須!!!

public class LifeManager : MonoBehaviour
{
    //LifeManagerクラスのインスタンスをシングルトンパターンで生成
    public static LifeManager instance;
    public int maxLife = 3;//プレイヤーの最大ライフ数を表す整数方の変数
    public Image[] lifeImages;//ライフを表示するためのUIイメージオブジェクトの配列
    private int currentLife;//現在のライフ数を表す整数方の変数

    //Awakeメソッドでは、LifeManagerクラスのインスタンスをシングルトンパターンで生成。
    //つまり、プログラム全体で唯一のLifeManagerオブジェクトを生成するためのコード
    private void Awake()
    {
        if (instance == null)
        {
            instance = this;
        }
        else
        {
            Destroy(gameObject);
        }
    }


    //Startメソッドでは、初期のcurrentLifeをmaxLifeと同じ値に設定し、
    //UpdateLifeUIメソッドを呼び出してUIを更新
    private void Start()
    {
        currentLife = maxLife;
        UpdateLifeUI();
    }

    //DecrementLifeメソッドは、ライフを減らすためのメソッド
    //currentLifeを1減らし、pdateLifeUIメソッドを呼び出してUIを更新
    //また、currentLifeが0以下になった場合は、ゲームオーバー処理を行う
    public void DecrementLife()
    {
        currentLife--;
        UpdateLifeUI();
        if (currentLife <= 0)
        {
          //ゲームオーバー時の処理をここに書く
        }
    }

    //UpdateLifeUIメソッドは、UIを更新するためのメソッド
    //lifeImages配列に格納されたイメージオブジェクトのうち、
    //現在のライフ数以下のオブジェクトに対しては、enabledをtrueに、
    //それ以外のオブジェクトに対しては、enabledをfalseに設定
    //これにより、現在のライフ数だけのライフ表示を実現している
    private void UpdateLifeUI()
    {
        for (int i = 0; i < lifeImages.Length; i++)
        {
            if (i < currentLife)
            {
                lifeImages[i].enabled = true;
            }
            else
            {
                lifeImages[i].enabled = false;
            }
        }
    }

}

※シングルトンパターン・・・プログラム内で1つのインスタンスしか存在しないクラスを実現するための設計パターン。したがって、複数のオブジェクトが同じ機能を持つことを防止できて、効率的なコードを実現することができます。

これにプレイヤーが敵に当たった時の処理を別のスクリプト(今回はEnemyスクリプト)に書けば、HPの管理ができるようになるはず。(青のアンダーラインがつながっているところ。)

↓のコードは敵キャラにアタッチします。あらかじめ敵キャラを作成して、Colliderをつけておきましょう。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Enemy : MonoBehaviour
{
    //コライダーの処理
    private void OnCollisionEnter2D(Collision2D collision)
    {
        //衝突判定対象が画面外に消えた時の処理
        if (collision.gameObject.CompareTag("//ここに衝突判定対象を入れる"))
        {
            // LifeManagerにHPの減少を通知する
            LifeManager.instance.DecrementLife();
        }
    }
    }

コメント

タイトルとURLをコピーしました