using System.Collections; using Sirenix.OdinInspector; using UnityEngine; using UnityEngine.UI; // ReSharper disable once CheckNamespace namespace BlueWaterProject { public class HpSlider : MonoBehaviour { [SerializeField] private Transform target; [SerializeField] private Slider slider; [SerializeField] private Slider damageEffectSlider; [SerializeField] private float duration = 2f; [SerializeField] private Vector3 offset = Vector3.up; [Button("셋팅 초기화")] private void Init() { slider = GetComponent(); damageEffectSlider = transform.Find("Fill Area/Background/DamageEffectSlider").GetComponent(); } private void Update() { if (!target) return; transform.position = target.TransformPoint(offset); } public void SetHpSlider(Transform target, float maxHp) { if (!slider || !damageEffectSlider) return; this.target = target; slider.maxValue = maxHp; damageEffectSlider.maxValue = maxHp; slider.value = maxHp; damageEffectSlider.value = maxHp; SetActiveHpSlider(true); } public void UpdateHpSlider(float value) { if (!slider || !damageEffectSlider) return; StartCoroutine(DamageEffect(value)); } private IEnumerator DamageEffect(float value) { var previousHp = slider.value; var tick = (previousHp - value) / duration; slider.value = value; while (damageEffectSlider.value > value) { damageEffectSlider.value -= tick * Time.deltaTime; yield return null; } damageEffectSlider.value = value; } public void SetActiveHpSlider(bool value) => gameObject.SetActive(value); } }