【Unity】時間経過でゲージを回復させる方法!

Unity

HPやスキルゲージの自然回復っていろんなゲームで見かけたりしますよね。

今回は、そんなゲージの自然回復の実装方法を紹介していきたいと思います。

ゲージバーの用意

ゲージバーの作り方は別の記事で解説していますので作り方がわからない方はそちらを読んでもらえればと思います。

スクリプト

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

public class Gage : MonoBehaviour
{
    [SerializeField] Slider gage;
    public float startIncreaseTime; //ゲージの自然回復の開始時間
    public float maxGageValue; //ゲージの最大値
    public float GageIncreaseTime; //ゲージの回復速度
    public float gageDecreaseValue; //ゲージを減らす量
    public float gageIncreaseValue; //ゲージの回復量

    float currentGageValue; //現在のゲージの値

    private float gageIncreaseTime; //ゲージ自然回復開始時間までの経過時間
    private float timeBetweenIncrease; //ゲージの回復速度を格納する変数

    void Start()
    {
        gage.maxValue = maxGageValue;
        gage.value = maxGageValue;
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Q) && currentGageValue > 0)
        {
            gageIncreaseTime = 0f;
            currentGageValue-=gageDecreaseValue;
            gage.value = currentGageValue;
        }

        gageIncreaseTime += Time.deltaTime;

        //設定された回復開始時間に達していてかつゲージの現在値が最大値より少ない場合は回復をする
        if (gageIncreaseTime > startIncreaseTime && currentGageValue < maxGageValue)
        {
            timeBetweenIncrease += Time.deltaTime;

            //1秒間隔でゲージを回復する
            if (timeBetweenIncrease >= GageIncreaseTime)
            {
                timeBetweenIncrease = 0f;
                currentGageValue += gageIncreaseValue;
                gage.value = currentGageValue;
            }
        }
    }
}

それでは、このスクリプトを適当なオブジェクトにアタッチしましょう。

自分は、「GageManager」という空のオブジェクトにアタッチしました。

アタッチをしたら「Gage」に用意したゲージを入れ、それぞれの項目に値を設定します。

Start Increase Time : 自然回復を開始するまでの待ち時間

Max Gage Value : ゲージの最大値

Gage Increase Time : ゲージの回復速度

Gage Decrease Value : ゲージを減らす量

Gage Increase Value : ゲージの回復量

これで実行をしてみましょう。

このようにゲージが減ってから2秒後に回復が開始し、一秒間隔でゲージが回復しています。

まとめ

いかがだったでしょうか?

自然回復はゲームでよくみられる要素の一つなので実装してみてもいいでしょう。

ゲージの増減をスムーズにしたいと考えている方はこちらの記事がおすすめです↓

コメント

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