ゲームでは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の値を変えれば勝手にゲージが変化してくれます。


