OldBlueWater/BlueWater/Assets/02.Scripts/Ui/HpSlider.cs
NTG b021b6ba6b Combat씬 보완하기
+ 우측 상단에 개발자 모드 Toggle 기능 추가
+ 전투 플레이어의 HpBar 추가
+ 전투 플레이어가 공격 시 이펙트 추가
+ 승회님 포레스트 맵에 잡몹 추가
+ 승회님 2D 나무 sorting Layer 플레이어와 동일하게 변경
+ 코뿔소 스킬마다 넉백 효과 짧고 굵게 변경
+ 코뿔소 돌진 스킬 넉백 로직 변경
+ 코뿔소 지진 스킬 이펙트 추가
+ StylizedAllEffect 에셋 추가
2024-02-19 20:40:16 +09:00

71 lines
2.0 KiB
C#

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<Slider>();
damageEffectSlider = transform.Find("Fill Area/Background/DamageEffectSlider").GetComponent<Slider>();
}
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);
}
}