격투 게임 HP 구현하기 (Recoverable HP :회복 가능 HP)
격투게임이나 특정 순간의 강력한 데미지를 표현해줄때 2중으로 HP를 표현해줌으로써 매번 체력 게이지를 보는게 아니기 때문에 얼만큼 차감이 되는지에 대해새 임펙트가 있는 형태의 HP이다.
반응형
< 코드 >
using System.Collections;
using UnityEngine;
using UnityEngine.UI;
public class HPBar : MonoBehaviour
{
[SerializeField]
private Image foregroundImage; // 즉시 감소하는 이미지
[SerializeField]
private Image backgroundImage; // 서서히 감소하는 이미지
public float smoothSpeed = 0.5f; // 배경 이미지 감소 속도
public float delay = 0.5f; // 배경 이미지가 감소하기 전 대기 시간
[SerializeField]
private float currentHP;
[SerializeField]
private float maxHP = 100f;
// 초기화
void Start()
{
currentHP = maxHP;
UpdateHPBar();
}
[ContextMenu("HP : Full")]
private void Full()
{
Start();
}
[ContextMenu("HP : Decrease - Random")]
private void RandomDmage()
{
float damage = Random.Range(0f, maxHP); // Random.Range로 수정
TakeDamage(damage);
}
// HP를 감소시키는 메서드
public void TakeDamage(float damage)
{
Debug.Log($"[HPBar] TakeDamage : {damage}");
currentHP -= damage; // 한 번만 감소
if (currentHP < 0) currentHP = 0;
// 즉시 전방 이미지 업데이트
foregroundImage.fillAmount = currentHP / maxHP;
// 배경 이미지는 서서히 감소시키는 코루틴 실행 (일정 대기 후)
StopAllCoroutines(); // 중복 실행 방지
StartCoroutine(SmoothBackgroundUpdate());
}
// 전방 이미지에 맞춰 배경 이미지를 일정 시간 후 서서히 감소시키는 코루틴
private IEnumerator SmoothBackgroundUpdate()
{
// 배경 이미지가 감소하기 전에 잠시 대기
yield return new WaitForSeconds(delay);
// 배경 이미지가 서서히 전방 이미지에 맞춰 감소
while (backgroundImage.fillAmount > foregroundImage.fillAmount)
{
backgroundImage.fillAmount = Mathf.MoveTowards(backgroundImage.fillAmount, foregroundImage.fillAmount, Time.deltaTime * smoothSpeed);
yield return null;
}
}
// HP 바를 업데이트하는 메서드
private void UpdateHPBar()
{
foregroundImage.fillAmount = currentHP / maxHP;
backgroundImage.fillAmount = currentHP / maxHP;
}
}
★☆☆☆☆
반응형
'개발 > Unity' 카테고리의 다른 글
Unity) 재화 획득 연출(흩뿌리고 타겟 이동 연출) (0) | 2024.10.18 |
---|---|
Unity) Debug -Json Pretty Print 적용하기 (0) | 2024.10.10 |
Unity) GameObject Active Script로만 제어하기 (5) | 2024.09.30 |
Unity) 슬롯 연출 : 보상 연출 (Slot Animation) (2) | 2024.09.25 |
Unity) Text Animation (Slide-in / Slide-Out) (0) | 2024.09.24 |
댓글