[Unity] 피격 시 데미지UI 활성/비활성화 방법(코루틴 사용 X)

728x90

 

피격 시 데미지UI 활성/비활성화 방법

Enemy로부터 타격을 받았을 때 체력이 깎이면서 빨강색 DamageUI가 호출되었다가 비활성화되는 효과를 구현하고자 한다. 이런 경우 보통 Coroutine을 사용하지만 기본적인 로직을 고민해보았을 때 다음과 같은 아이디어를 떠올려 보았다.

 

HP가 감소되면서 Damage UI가 호출되어야 하기 때문에 Get / Set 프로퍼티를 사용해주었다. 그리고 PlayerHealth 클래스를 싱글턴으로 가져와 Enemy 스크립트의 OndamageProcess() 에 PlayerHealth.Instance.hp--; 해주었다. 체력 감소와 관련된 기본 코드를 구현해 놓고, 이제는 피격 시 Damage UI가 호출되도록 한다. 

[SerializeField]
int hp = 3;
public Image damgaeUI;
public int HP
{
    get
    {
        return hp;
    }
    set
    {
        hp = value;
        // 스톱와치 켜는 동작
        damgaeUI.enabled = true;
        // 일정시간 동안 UI를 활성화 시켜줬다 끄도록 하고 싶다
    }
}

public float blinkTime = 0.25f;
float currentTime = 0;

public static PlayerHealth Instance;
private void Awake()
{
    Instance = this;
}

// Update is called once per frame
void Update()
{
    // 스톱와치가 시작됬다면
    if(damgaeUI.enabled)
    {
        // 일정시간 동안 UI를 활성화 시켜줬다 끄도록 하고 싶다
        currentTime += Time.deltaTime;
        if(currentTime > blinkTime)
        {
            currentTime = 0;
            damgaeUI.enabled = false;
        }
    }
}

Set 프로퍼티에서 damageUI.enabled = true로 UI를 활성화해 놓는다. 그리고 Update 문에서 현재시간을 Time.deltaTime에 맞춰 증가시키고, OndamgeProcess() 함수가 실행되어 damageUI가 활성화되면 blinkTime(0.25)이 지나면 다시 비활성화해준다. 이런식으로 피격 이벤트 발생 시 Damage UI가 반복 실행되도록 구현하였다.

 

728x90