본문 바로가기
게임개발/유니티 엔진

Game Object 파괴시 null 처리

by do_ng 2024. 3. 15.

 

MonsterController는 player 인스턴스의 주소를 들고 있는데 그 인스턴스를 파괴했을 때, 

CameraController는 매 프레임마다 heap에 있는 player 인스턴스를 접근해서 사용중인데 갑자기 그 인스턴스가 메모리에서 날아가버리면 null을 접근하고 있으므로 런타임 에러가 발생한다. 

GameObject player; // player 변수는 x001 주소를 가리키고 있음

transform.position = player.transform.position + delta;
// player.transform.position -> x001 주소에 아무것도 없음

 

heap 객체에 있는 인스턴스가 메모리에서 해제됬다고 해서 그 인스턴스를 가리키고 있는 참조값은 변하지 않는다.

그런데 왜? player 변수에 "null" 라는 문자열이 들어가 있을까? 

if (player == null)
{
    return;
}

다른 객체의 참조값에서 그 인스턴스를 null 체크 할때 그 인스턴스가 유효하지 않으면 그 인스턴스의 주소를 가지고 있는 변수를 null로 변경하게끔 유니티 엔진 내부적으로 구현되어 있다.

(player의 주소 x001을 계속 가지고 있을 것이라고 생각해서 null 체크가 안될줄 알았음..)

 

다른 쪽에서 해당 인스턴스를 메모리에서 제거했지만, 그 인스턴스를 접근하고 있던 다른 클래스들은 null 체크를 함으로써 런타임 에러를 막을 수 있다.