【Unity】HPゲージを作る

Unity HPゲージ ゲーム制作メモ
スポンサーリンク

ゲームではHPなどの表示にゲージを使うことが多いのですが、Unityには標準でゲージをサクッと作れる機能がありません。そこで今回はトップ画像のような汎用性の高いゲージを自作することにしました。

UIの作成

まずはゲージのオブジェクトを作ります。今回作るゲージは

  • 下地(暗い赤の部分)
  • ゲージ本体(緑の部分)

に分かれるので、これを作ればOK。作り方はとても簡単でゲージ本体を下地の子に設定するだけです。ちなみに今回は右から左に縮小するタイプのゲージなので、ゲージ本体のScaleの基準が左端になるようにPivotXを0にしておく必要があります。

ゲージのアニメーションにTweenを使う

次にゲージのアニメーションです。上のGIFではゲージが滑らかに縮んでいますが、これはTweenという機能を使っています。Tweenとは開始・終了・時間を設定するとその間の変化を補完する機能です(標準機能ではなくアセットで提供されます)。Tween用のアセットはいくつかあるのですが、ここではDOTweenを導入しました。

ゲージのC#スクリプト

それでは今回作ったゲージのC#スクリプトを載せておきます(利用規約の範囲内でご利用ください)。これをゲージ本体のゲームオブジェクトにアタッチすれば完成です。

using UnityEngine;
using DG.Tweening;

public class GaugeController : MonoBehaviour
{

	[SerializeField]
	bool isVerticalGauge = false;
	[SerializeField]
	float animationTime = 0.2f;

	float gaugeValue = 100;
	RectTransform gaugeBarRect;

	public float Value
	{
		set
		{
			gaugeValue =  Mathf.Clamp(value, MinValue, MaxValue);

			GaugeAnimation();
		}
		get
		{
			return gaugeValue;
		}
	}

	public float MinValue { set; get; } = 0;
	public float MaxValue { set; get; } = 100;

	public float GaugeScale
	{
		get
		{
			return Value / MaxValue;
		}
	}

	void Awake()
	{
		gaugeBarRect = GetComponent<RectTransform>();
	}

	void GaugeAnimation()
	{
		if (!isVerticalGauge)
		{
			gaugeBarRect.DOScaleX(GaugeScale, animationTime);
		}
		else
		{
			gaugeBarRect.DOScaleY(GaugeScale, animationTime);
		}
	}
    
}

使い方ですが、このコンポーネントを取得してValueの値を変えれば勝手にゲージが変化してくれます。