본문 바로가기
Unity 유니티

Unity 유니티 오류 NullReferenceException ?? 널 오류~

by 지나팩 2024. 12. 31.

 

NullReferenceException은 Unity에서 가장 자주 발생하는 오류 중 하나입니다. 이 오류는 코드에서 객체(Object)에 접근하려고 했지만, 해당 객체가 null(비어있는 상태)인 경우에 발생합니다. 즉, 변수에 참조된 객체가 없는데 해당 변수의 속성이나 메서드에 접근하려고 할 때 이 예외가 발생합니다.

 

 

위 코드에서 obj라는 GameObject가 null인 상태인데, obj.transform.position에 접근하려고 하면 NullReferenceException이 발생합니다.

 

 

 

 

 

 

 

 

자주 발생하는 원인

  1. 오브젝트가 에디터에서 할당되지 않음
    • public 또는 [SerializeField]로 선언된 변수를 Unity 인스펙터 창에서 오브젝트에 연결하지 않았을 경우.
  2. 스크립트에서 동적으로 찾는 객체가 null
    • GameObject.Find()나 FindObjectOfType<T>() 등으로 객체를 찾을 때 대상이 존재하지 않을 경우.
  3. 객체가 파괴되거나 삭제된 후 접근
    • Destroy()로 삭제된 객체를 참조하려 할 때.
  4. 잘못된 경로 또는 설정
    • Resource에서 로드하거나 Prefab을 Instantiate할 때 잘못된 파일 경로로 객체를 불러오는 경우.

 

 

 

 

 

 

해결 방법

1. 인스펙터에서 할당 확인

  • 변수에 할당된 값이 있는지 인스펙터에서 확인하고, 누락된 경우 올바른 오브젝트를 드래그 앤 드롭으로 연결합니다.

 

 

2. null 체크 추가

  • 코드에서 객체가 null인지 확인하는 방어 코드를 추가합니다.

 

3. Awake 또는 Start에서 동적 참조 초기화

  • 동적으로 오브젝트를 찾을 때 null 상태가 되지 않도록 초기화를 보장합니다.

 

 

 

 

 

 

4. Prefab 인스턴스가 null인지 확인

  • Instantiate()로 생성된 객체를 사용하기 전에 null 체크를 수행합니다.

 

5. Destroy된 객체 사용 방지

  • Destroy() 이후 객체를 null로 초기화하거나 null 체크를 추가합니다.

 

 

NullReferenceException은 Unity 개발에서 흔히 접하는 오류지만, 인스펙터를 통한 할당 여부 확인, null 체크 코드 추가, 동적 참조의 초기화 등을 통해 쉽게 방지할 수 있습니다. 특히 디버깅을 잘 활용해 원인을 파악하고 위의 방법을 적용하면 오류를 효과적으로 해결할 수 있습니다.

댓글