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 체크를 함으로써 런타임 에러를 막을 수 있다.
'게임개발 > 유니티 엔진' 카테고리의 다른 글
몬스터 반경 내의 플레이어 감지 (0) | 2024.04.03 |
---|---|
GameObject.AddComponent("스크립트") start 메서드 실행 문제점 (0) | 2024.03.26 |
네비게이션 시스템 (0) | 2024.03.10 |
Time.DeltaTime (0) | 2024.03.09 |
Coroutine(코루틴) (0) | 2024.03.07 |