using DG.Tweening; using UnityEngine; using UnityEngine.UI; [RequireComponent(typeof(RectTransform))] public class HealthGauge : MonoBehaviour { [SerializeField] private Image front; [SerializeField] private Image back; [SerializeField] private float shakeMagnitude = 1f; private float _hp = 1f; private RectTransform _rectTransform; // ダメージを受ける public void TakeDamage(float damage) { _hp = Mathf.Clamp(_hp - damage, 0f, 1f); var sequence = DOTween.Sequence(); sequence. Append(front.DOFillAmount(_hp, 0.2f)). Join(_rectTransform.DOShakePosition( 0.5f, 10f * shakeMagnitude, 20)). SetDelay(0.1f). Append(back.DOFillAmount(_hp, 0.5f)); } // 回復する public void Heal(float heal) { _hp = Mathf.Clamp(_hp + heal, 0f, 1f); var sequence = DOTween.Sequence(); sequence.Append(front.DOFillAmount(_hp, 0.5f)); sequence.Join(back.DOFillAmount(_hp, 0.5f)); } private void Awake() { _rectTransform = GetComponent(); } }