본문 바로가기

ㄱㅔ임 ㄱㅐ발

무적 기능을 구현해보ㅈㅏ!(코루틴)

오늘은 코루틴을 사용하여 무적 기능을 구현해보도록 하겠습니다!

 

먼저 저는 두가지 방법을 생각해보았는데

1. bool값 이용

2. layer 이용

이중 bool값을 이용하는 방법에 대해 설명을 해보도록 하겠습니다.

 

코드

[SerializeField] private bool invincibility;

저희가 무적인지 아닌지 판단할 때 사용하기 위한 bool 형식의 변수입니다.

 private void OnTriggerEnter2D(Collider2D col)
   {
      if (col.CompareTag("Bullet"))
      {
         OnDamaged();
      }
   }

저는 2D상에서 구현을 하였기 때문에 OnTriggerEnter2D를 사용하였지만 3D이신 분들은 OnTriggerEnter를 사용해주시면 되겠습니다.

만약 닿은 오브젝트가 Bullet 태그를 가지고있으면 피해를 담당하는 함수를 실행해줍니다.

void OnDamaged()
   {
      if (isInvincibility) return;

      hp--;
      if (hp <= 0)
         GameOver();
      StartCoroutine(InvincibilityCoroutine());
   }

만약 bool값이 참일때, 즉 무적 상태일때에는 바로 return을 해주기 때문에 피해를 입지 않습니다.

이후 hp를 감소시키며 만약 hp가 0 이하일 떄 게임 오버 함수를 실행합니다.

피해를 받은 직후 무적상태를 켜주는 코루틴을 실행해줍니다.

IEnumerator InvincibilityCoroutine()
   {
      isInvincibility = true;
      yield return new WaitForSeconds(3f);
      isInvincibility = false;
   }

bool값을 참으로 변경한 뒤 3초 뒤에 다시 false로 돌리는 코드입니다. WaitForSeconds안에 있는 숫자를 변경해주는것으로 간단하게 무적시간을 변경해줄 수 있습니다.