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
'게임 프로그래밍 > 유니티 프로젝트' 카테고리의 다른 글
[Unity] 클래스 상속을 이용한 CameraShake 구현(Random, Sine, Animation) (0) | 2022.08.18 |
---|---|
[Unity] 애니메이션 이벤트 함수 설정 및 애니메이션 커스터마이징 팁 (0) | 2022.08.10 |
[Unity] 믹사모 에셋 Animation 이동 관련 오류 발생 원인 및 해결 방법 (0) | 2022.08.08 |
[Unity] FPS에서 피격 시 KnockBack 넉백 피격효과 구현 (0) | 2022.08.05 |
[Unity] OnDrawGizmos() 함수를 사용하여 시각적으로 범위 체크하기 DrawLine, DrawRay (0) | 2022.08.05 |