오늘은 코루틴을 사용하여 무적 기능을 구현해보도록 하겠습니다!
먼저 저는 두가지 방법을 생각해보았는데
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안에 있는 숫자를 변경해주는것으로 간단하게 무적시간을 변경해줄 수 있습니다.
'ㄱㅔ임 ㄱㅐ발' 카테고리의 다른 글
(유니티) 싱글톤 패턴에 대해 알아보ㅈㅏ! (0) | 2022.10.08 |
---|---|
코루틴에 대해 알아보ㅈㅏ! (0) | 2022.10.07 |
똥 피하기 게임을 만들어보ㅈㅏ!(3. Instantiate를 사용하여 똥을 만들기, 게임 빌드하기) (0) | 2022.10.05 |
똥 피하기 게임을 만들어보ㅈㅏ!(2. 플레이어와 똥 오브젝트 만들기, Rigidbody와 Collider 이해하기) (0) | 2022.10.04 |
똥 피하기 게임을 만들어보ㅈㅏ!(1. 타이틀씬 만들기) (2) | 2022.10.03 |