[Unity Error] 유니티 == 비교 연산자와 관련된 랜덤 버그 발생 원인과 방어코드 사용한 해결 방법

728x90

== 비교 연산자와 관련된 랜덤 버그 발생 원인과 방어코드 사용한 해결 방법

if (collision.gameObject.CompareTag("Player")) 
{
    PlayerHealth ph = collision.gameObject.GetComponent<PlayerHealth>();
    ph.hp--;
    if(ph.hp <= 0) 
    {
         Destroy(collision.gameObject);
    }
}

player를 검출해서 enemy와 충돌이 발생했을 때 hp가 깎이고, 체력이 다 닳으면 destroy되는 스크립트를 만들었다. 그런데 여기서 ph.hp == 0 으로 쓰지 않고 굳이 ph.hp <= 0으로 써주는 이유는 유니티에서 발생하는 랜덤 버그를 방지하기 위함이다. 무슨 이유인지는 모르겠지만 유니티에서는 hp가 0보다 적은 - 체력 때도 enemy가 살아있는 랜덤 버그들이 발생하곤 한다. 어차피 체력이 0이나 0 이하나 같은 개념이기 때문에 버그를 미연에 방지하기 위해 다음과 같이 코드를 작성해 주는 것이다. 이를 실무에서는 '방어코드'라고 부르고, == 비교 연산자를 지양한다고 한다.  

728x90