【Unity2D】HPゲージ(体力UI)をImageで簡単に作る|(コードあり・解説付き)

HPゲージの作り方 Unity2D実装解説(テクニック)

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

Unityで、
「体力UIを表示させるようにしたい」
「HPを数値だけで管理すると、プレイヤーにとって分かりづらい…」
ということはありませんか?

そんなときは、減っていくHPバー(体力ゲージ) を表示すると一気にゲームらしくなります!

この記事では、
UnityのImageコンポーネントの「Fill」機能を使ってHPバーを作る簡単な方法 を解説します!

※当記事は、HPゲージUIを作る方法を中心で解説しています。
⬇️ダメージ処理を受ける+HPゲージUI込みで流れで作りたい方はこちらの記事を見るとスムーズです

⬇️こちらは、ダメージ処理を判定させる方法に特化した記事です


この記事でできること

  • 画面にHPバーを表示できる
  • ダメージを受けるとHPバーが減る
  • Image.fillAmount を使ったUI制御が理解できる

① HPバーUIを作る

① 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):実際に減る部分

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


② HPを減少させるソースコード

今回はHPバーUIの動きを確認しやすいように、Spaceキーを押すとHPが減るサンプルで解説します。ダメージを受ける処理の代わりに、Spaceキーを押すたびにゲージが減少していくことが確認できます。

using UnityEngine;
using UnityEngine.UI;

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

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

    private int _currentHP;

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

    void Update()
    {
        // Spaceキーを押したらHPを1減らす
        if (UnityEngine.Input.GetKeyDown(KeyCode.Space))
        {
            _currentHP--;
            _currentHP = Mathf.Clamp(_currentHP, 0, _maxHP);
            _UpdateHPBar();
        }
    }
    
    private void _UpdateHPBar()
    {
        if (_hpBarFill == null) return;

        _hpBarFill.fillAmount = (float)_currentHP / _maxHP;
    }
}

③ コードを1行ずつ解説

HPを管理する変数

[SerializeField] private int _maxHP = 5;
private int _currentHP;

_maxHP は最大HPです。
_currentHP は現在のHPです。

SerializeField を付けているので、Inspector から数値を調整することもできます。


StartでHPを初期化する

private void Start()
{
    _currentHP = _maxHP;
}

ゲーム開始時に、現在HPを最大HPと同じ値にしています。
これを入れておくことで、最初から満タンの状態でスタートできます!

HPバー更新処理

    private void _UpdateHPBar()
    {
        if (_hpBarFill == null) return;

        _hpBarFill.fillAmount = (float)_currentHP / _maxHP;
    }

ここで「見た目(UI)」を更新しています。
_hpBarFill.fillAmountは赤いゲージ部分の長さとなる部分です。
現在HPからMAXHPを割って今の体力の割合を求め、_hpBarFill(赤いゲージ部分のImage)にセットしています。
こうすることで、バーの長さを少しずつ削って体力が変動するように見せています!


④ プレイヤー側にバーをセットする

Playerオブジェクトを選択し、Inspectorの「HP Bar Fill」に対して作ったHPBar_Fillをドラッグ&ドロップします!

_hpBarFillにドラッグする画像

これを忘れると動かないので注意です!


❌よくあるエラー

HPバーが減らない

原因:

  • Image Typeが「Simple」になっている
    ➡️ 必ず「Filled」にする

NullReferenceExceptionが出る

原因:

  • _hpBarFillの設定忘れの可能性大
    ➡️ ④の手順通り、Inspectorの「HP Bar Fill」に対して、作ったHPBar_Fillをドラッグ&ドロップする

まとめ

最後まで読んでいただきありがとうございました。
ImageのFill機能を使ったHPバー(体力UI)の作り方を解説しました!

動作確認はSpaceキーで行いましたが、実際のゲームでは敵に触れたときにHPを減らす形にしています。
敵に触れたらダメージを受ける処理の仕組みは、こちらの記事で詳しく解説しているので、
合わせて実装すると「敵に触れる」→「ダメージを受ける」→「HPを減らす」という風になり、一気にゲームらしくなります👾

コメント

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