24.01.25 TIL - Unity : 자주 뜨는 에러메세지 4종

JJwoo·2024년 1월 25일

에러의 해결 방식

  1. 콘솔창에서 에러 메세지를 읽고 어떤 에러 타입인지 파악
  2. 에러 메세지를 더블클릭하여 에러가 발생한 스크립트로 이동
  3. 에러 타입으로 에러 원인을 발생시킨 코드를 유추
  4. 해당 에러 타입에 맞게 적절한 코드 수정

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Study6_Error : MonoBehaviour


    GameObject target; // 퍼블릭이 아닌 상태의 미할당 변수
    //게임을 실행할 수는 있지만 시작시 nullRefrenceException 에러가 나타난다. 레퍼런스가 null이다
    // = 값이 없는 변수를 사용하여 발생하는 에러이다.

    public GameObject target2; // 퍼블릭 상태의 미할당 변수


    public GameObject Dllight; // dl 라이트의 light 컴포넌트를 담을 변수, Missing 오류 예시용
    // 이후 유니티 인스펙터창에서 DL light 오브젝트를 할당해주었음.

    // Start is called before the first frame update
    void Start()
    {

        Destroy(Dllight); // Dllight 오브젝트를 삭제
  
        
        print(target.name); // nullRefrenceException 에러 발생

        // nullRefrence에러가 뜬 상황에서, 둘 중 값을 할당하지 않으면 에러가 발생하는 변수는 target이다.
        // int, float, char, string, bool과 같은 기본 자료형은 값을 할당 안해도 기본 값이 자동으로 부여 된다.

        //하지만 위의 target은 GameObject 자료형으로써 기본 값이 할당되지 않으면 문제가 발생 한다. 
        // 이 때 비어있는 변수가 public 상태면 UnassignedReferenceException라는 에러가 발생한다. 

        print(target2.name); // public 상태의 할당하지 않은 변수의 값 출력 = UnassignedReferenceException 에러 발생


        // OutOfRange 에러는 '범위를 벗어난' 이라는 뜻으로써 배열과 같이,
        // 크기가 있는 수의 접근 가능한 범위를 벗어났을 때 발생하는 에러.
        // 배열 외에도 모든 상황에서 범위 외의 영역에 접근하려 하면 발생하는 에러이다.

        int[] array = { 1, 3, 5 };
        print(array[10]);  // 배열의 범위를 벗어난 인덱스 사용, IndexOutOfRangeException 에러
    }

    // Update is called once per frame
    void Update()
    {
        print(Dllight.name); // Dllight 오브젝트의 이름을 출력, 하지만 위에서 Destroy 했기 때문에 Missing 에러가 발생
    }


    // 코드는 위아래 아래로 진행되기에, 오류 뒤에 Exception붙으면 그 다음 코드들은 실행되지 않고 그 자리에서 멈춘다.
}
profile
개발 모코코

0개의 댓글