Unityにおいて、上記GIFの赤いHPバーを実現するためのコード例を示します。
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;
using System.Collections;
namespace Murosta.Utility
{
public class AnimatingRatioIndicator : MonoBehaviour
{
[SerializeField]
Slider frontSlider;
[SerializeField]
Slider backgroundSlider;
public void SetRatio(float value)
{
var clampedValue = Mathf.Clamp01(value);
frontSlider.value = clampedValue;
if (backgroundSlider)
{
backgroundSlider.value = clampedValue;
}
}
public Coroutine AnimateRatio(
float value,
float frontDuration = 0.1F,
float backgroundDuration = 0.3F,
float backgroundDelay = 0.2F)
{
return StartCoroutine(AnimateRatioEnumerator(value, frontDuration, backgroundDuration, backgroundDelay));
}
IEnumerator AnimateRatioEnumerator(
float value,
float frontDuration,
float backgroundDuration,
float backgroundDelay)
{
var clampedValue = Mathf.Clamp01(value);
var frontTweenner = frontSlider.DOValue(clampedValue, frontDuration).SetEase(Ease.InQuad);
if (backgroundSlider)
{
yield return backgroundSlider
.DOValue(clampedValue, backgroundDuration)
.SetDelay(backgroundDelay + frontDuration)
.SetEase(Ease.InOutQuad)
.WaitForCompletion();
}
else
{
yield return frontTweenner.WaitForCompletion();
}
}
}
}
- アニメーションはDoTweenを利用
- 値は、0.0Fから1.0Fの間を指定する(Mathf.InverseLerpが活躍すると、0.0Fから1.0Fの値に簡単に変換可能)
-
frontSlider
の参照設定は必須 -
backgroundSlider
の参照設定をすることでGIFのように、時差で減るインジケーターを表現できる - アニメーションを行うメソッドは
Coroutine
を返し、Coroutine in Coroutine
が可能で扱いやすい
GIF内の画像