【Unity入門⑧】敵に触れたらダメージ!体力UIを作ってみよう

Unityで2Dアクションゲームを作ろう! Unity2D入門(シリーズ)

こんにちは!夜の街2Dアクションゲームを制作中の怪獣です🦖

前回の記事では、敵を作る方法を解説しました👾



今回はそこから一歩進んで、プレイヤーが敵に触れたら体力が減る仕組みを作ってみましょう👾
さらに、体力UI(HPバー)を画面に表示して、減っていく演出も追加します!

⬇️画像のように、左上に赤いHPバーを作成していきます!

体力UI(HPバー)の

完成イメージ

  • 画面左上にHPバーが表示される
  • プレイヤーが敵に触れるとHPバーが減る
  • HPが0になったらプレイヤーが倒れる(Unity入門⑨で追加予定)

① 体力UI(HPバー)の準備

① Canvasを作成

まずはUIの土台となるCanvasを作ります。

Canvas(キャンバス)とは、一言でいうと
Unityで「UIを表示するための土台(画面)」です。

テキスト、ボタン、パネルなどの UI要素は、必ず Canvas の子オブジェクトとして配置されます。

Hierarchy → 右クリック → UI > Canvas で作成します。

Canvasの作り方の画像

② HPの枠部分のバーを作る

背景バーのベースとなる枠部分を追加します!

①で作ったCanvasを選択 → 右クリック → UI → Imageを追加します

Imageの作り方の画像

追加したImageを選択し、以下を変更します。

  • 名前:HPBar_Backに変更
  • 色:黒やグレーに変更する
  • サイズ:横長(例:300×30ぐらい

③ ゲージ部分を作る(赤のバー)

②で作った背景バーに対して、子オブジェクトとしてゲージ部分を作ります!
この③で作る部分はゲージのHPが減る見た目の赤い部分を指しています。

②で作ったHPBar_Backを選択→ 右クリック → UI → Imageを追加します
親子関係にするのがポイントです💡

Imageの作り方の画像


追加したImageを選択し、以下を変更します。

  • 名前:「HPBar_Fill」に変更する
  • Inspector >Image > Source Imageを適当なスプライトに設定する(Squareなど)
  • Color:赤など
  • Image Type:Filledに変更(画像を少しずつ消したり、伸ばしたりできる機能にする)
  • Fill MethodHorizontalに変更(横に左→右(または右→左)にゲージが減るようになる)
  • Fill OriginLeftに変更(左から減る)
Imageの各種設定の画像

➡️これで「左から減るHPバー」仕組みになります!

  • 背景(Back):HPの枠
  • 前面(Fill):実際に減る部分

こうして分けることで、見た目調整がしやすくなります!

HPUIを作成している画像

② プレイヤーにHP処理を追加(Player.cs)

以下のように、Player.csに体力変数とダメージ処理を追加します⬇️

using UnityEngine;
using UnityEngine.UI; // ← UIを扱うために追加

public class Player : MonoBehaviour
{
    [SerializeField, Header("最大HP")]
    private int _maxHP = 5;

    private int _currentHP;
    [SerializeField, Header("HPバーのImage")]
    private Image _hpBarFill;

    private void Start()
    {
        _currentHP = _maxHP;
        _UpdateHPBar();
    }

    // 敵に触れたときの処理
    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.CompareTag("Enemy"))
        {
            _TakeDamage(1);
        }
    }

    // ダメージ処理
    private void _TakeDamage(int damage)
    {
        _currentHP -= damage;
        _currentHP = Mathf.Clamp(_currentHP, 0, _maxHP);

        _UpdateHPBar();

        if (_currentHP <= 0)
        {
            Debug.Log("プレイヤーが倒れました");
            // 次回以降でリスポーンなどの処理を追加予定
        }
    }

    // HPバーの見た目を更新
    private void _UpdateHPBar()
    {
        if (_hpBarFill != null)
        {
            _hpBarFill.fillAmount = (float)_currentHP / _maxHP;
        }
    }
}

OnCollisionEnter2D()は「ぶつかったときに呼ばれる処理」です。
今回はここで敵かどうかを判定して、ダメージ処理を呼び出してHPバーの見た目を更新するようにしています。
各処理の詳しい説明は別記事で解説していますので、ご興味あればこちらを参照ください👾


③ 敵オブジェクトの設定

  1. Enemy オブジェクトに Tag: Enemy を新規作成をして設定します。
  2. Rigidbody2DCollider2D をつけて、物理的に触れられる状態にします。
Tag: Enemyを選択

➡️これで、プレイヤーと敵がぶつかると OnCollisionEnter2D が発動します。


④ プレイヤーのInspector設定

  • _hpBarFill の欄に、Canvas上の HPBar_Fill をドラッグして割り当てます。
_hpBarFillにドラッグする画像

動作確認

  1. プレイヤーと敵を配置してプレイ
  2. 敵に触れるとHPバーがスッと減るのを確認
  3. 体力が0になると、コンソールに「プレイヤーが倒れました」と表示

➡️敵に触れたら赤いバーが減っていくようになりました!


まとめ

  • 敵にぶつかると体力が減る仕組みを追加
  • HPバーをUIとして表示して、減少を視覚化
  • 体力が0になると「倒れた状態」にできるよう準備

最後まで読んでいただきありがとうございました!

体力UIを視覚的に作り、徐々に減少していく演出をさせることが出来ました!
これにプラスして、体力が0になったら「ゲームオーバー」と表示させるのが一般的ですよね。
次の記事では、体力が0になったときにゲームオーバー演出を出す処理を追加していきます!

コメント

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