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
'게임 프로그래밍 > 유니티 프로젝트' 카테고리의 다른 글
[유니티/C#] 메모리 정적 & 동적 할당과 유니티 내 싱글톤(Singleton) 패턴의 활용 (0) | 2022.09.27 |
---|---|
[유니티/C#] Get/Set 프로퍼티와 객체지향 캡슐화 (0) | 2022.09.27 |
[유니티/C#] this 키워드와 이벤트 함수 (0) | 2022.09.26 |
[유니티/C#]배열과 리스트를 사용한 오브젝트 풀링, 가비지 콜렉팅을 통한 메모리 최적화 (0) | 2022.09.26 |
[Unity] 클래스 상속을 이용한 CameraShake 구현(Random, Sine, Animation) (0) | 2022.08.18 |