본문 바로가기
Unity 유니티

Unity 유니티 오류 UnassignedReferenceException이란?

by 지나팩 2024. 12. 31.

UnassignedReferenceException은 Unity에서 변수가 인스펙터에서 할당되지 않은 상태로 접근되었을 때 발생하는 오류입니다. Unity는 변수가 초기화되지 않은 경우 null로 단순히 처리하지 않고, 개발자에게 명확한 경고를 주기 위해 이 예외를 던집니다.

 

 

 

 

 

 

 

이 코드는 obj라는 GameObject가 인스펙터에서 연결되지 않았기 때문에 UnassignedReferenceException이 발생합니다.

 

 

 

 

 

UnassignedReferenceException의 주요 원인

  1. 인스펙터에서 변수가 할당되지 않음
    • public 또는 [SerializeField]로 선언된 변수가 Unity 인스펙터에서 오브젝트로 연결되지 않은 경우.
  2. 동적으로 찾는 오브젝트가 null
    • GameObject.Find() 또는 FindObjectOfType<T>()를 사용했지만, 씬에 해당 오브젝트가 존재하지 않는 경우.
  3. Prefab의 연결 누락
    • 스크립트에서 사용하는 Prefab이 할당되지 않았거나 누락된 경우.
  4. Destroy된 오브젝트를 참조
    • 특정 상황에서 Destroy()된 오브젝트에 접근하려고 할 때.

 

 

 

 

 

 

UnassignedReferenceException 해결법

방법 1: 인스펙터에서 변수에 GameObject 연결

Unity 인스펙터에서 해당 변수에 적절한 오브젝트를 드래그 앤 드롭으로 연결합니다.

  1. 스크립트를 게임 오브젝트에 추가합니다.
  2. 스크립트가 추가된 게임 오브젝트를 선택한 상태로 인스펙터를 확인합니다.
  3. obj변수에 참조할 GameObject를 드래그 앤 드롭으로 연결합니다.

 

방법 2: null 체크를 통한 방어 코드 작성

변수가 null 상태일 가능성을 고려하여 null 체크를 추가합니다.

 

 

방법 3: 동적 초기화 사용

변수를 코드에서 동적으로 초기화할 수도 있습니다.

 

방법 4: Destroy된 객체 초기화

객체를 Destroy()로 삭제한 경우에는 명시적으로 null로 초기화합니다.

 

 

 

 

 

 

 

UnassignedReferenceException을 예방하는 팁

  1. 인스펙터에서 항상 변수 할당 상태 확인
    • 스크립트를 작성할 때 인스펙터를 확인하여 필요한 모든 변수가 올바르게 연결되었는지 확인합니다.
  2. 디버깅으로 오류 추적
    • Debug.Log()를 활용해 변수가 null인지 여부를 확인하고 문제를 해결합니다.
  3. Prefab 관리
    • 스크립트에서 사용하는 Prefab이 누락되지 않도록 프로젝트 구조를 정리하고 할당 상태를 점검합니다.
  4. 코드 작성 시 null 체크 습관화
    • 모든 변수는 null 체크를 통해 안정성을 확보합니다.

UnassignedReferenceException은 Unity에서 발생하는 흔한 오류지만, 그 원인과 해결법을 명확히 이해하면 쉽게 극복할 수 있습니다. 이 오류는 단순히 변수를 할당하지 않은 실수에서 비롯되므로, 인스펙터 상태를 꼼꼼히 확인하고, 코드에서 null 체크를 추가하는 등 기본적인 방어 코드를 작성하는 습관이 중요합니다.

댓글