[Unity] Debug 클래스

Jongmin Kim·2025년 5월 22일

Unity

목록 보기
2/19
post-thumbnail

서론

Debug 클래스를 사용하면 프로젝트가 실행되는 동안 예외가 발생하는 위치나 예상치 못한 동작을 파악하고 조사하는 데 도움이 되는 정보를 시각화할 수 있다.



콘솔 로깅

Log

Debug.Log()는 에디터의 콘솔 창에 메시지를 출력할 때 사용한다.

Debug.Log()object 매개변수를 받기 때문에, C#의 모든 타입을 인자로 전달할 수 있다.
하지만 유니티 내부적으로 ToString()을 호출하여 문자열로 출력하므로 결과를 예측하고 사용해야 한다.

커스텀 클래스를 출력하는 경우, ToString()을 반드시 오버라이딩해야 한다.


private void Awake()
{
    Debug.Log("Log() 호출");
    Debug.Log("Log() 호출", gameObject);
}

Debug.Log()의 두 번째 인자로는 메시지와 관련이 있는 오브젝트를 전달한다.
콘솔에서 이 메시지를 클릭하게 되면 하이어라키 창에 있는 오브젝트가 하이라이트된다.


LogWarning

Debug.LogWarning()은 에디터의 콘솔 창에 주의(노란색 느낌표) 메시지를 출력할 때 사용한다.
사용 방법은 Debug.Log()와 완전히 동일하다.


LogError

Debug.LogError()는 에디터의 콘솔 창에 오류(빨간색 느낌표) 메시지를 출력할 때 사용한다.
사용 방법은 Debug.Log()와 완전히 동일하다.

LogException

Debug.LogException()은 에디터의 콘솔 창에 예외 메시지를 출력할 때 사용한다.
사용 방법은 Debug.Log()와 완전히 동일하다.

예시로 int 데이터를 0으로 나누어보자.

public class Debuging : MonoBehaviour
{
    private int result;
    private int zero = 0;

    private void Awake()
    {
        try
        {
            result = 10 / zero;
        }
        catch (Exception e)
        {
            Debug.LogException(e);
            Debug.LogException(e, gameObject);
        }
    }
}



디버깅용 렌더링

DrawLine

Debug.DrawLine()씬에 선분을 시각화하기 위해 사용한다.

DrawLine()의 선언과 매개변수는 다음과 같다.

[FreeFunction("DebugDrawLine", IsThreadSafe = true)]
public static void DrawLine(Vector3 start,						// 시점
							Vector3 end,						// 종점 
                            Color color = Color.white, 			// 선분의 색상
                            float duration = 0f,				// 유지되는 시간
                            bool depthTest = true);				// 다른 오브젝트에 가려지는가

예를 들어, 게임 오브젝트의 위치에서 x축으로 2f만큼 이동한 위치를 대상으로 선분을 그린다면 다음과 같다.

private void Update()
{
    Debug.DrawLine(transform.position, Vector2.right * 2f, Color.green);
}

그리고 이는 영구적으로 유지되는 것이 아니라 게임 오브젝트의 위치에도 영향을 받는다.
따라서 게임 오브젝트를 움직이게 되면 그려지는 선분도 달라진다.



DrawRay

Debug.DrawRay()방향 벡터를 이용하여 레이를 시각화할 때 사용한다.

Debug.DrawRay()의 선언과 매개변수는 다음과 같다.

    public static void DrawRay(Vector3 start, 					// 시점
    						   Vector3 dir, 					// 방향 벡터
                               Color color = Color.white, 		// 레이의 색상
                               float duration = 0f, 			// 유지되는 시간
                               bool depthTest = true);			// 다른 오브젝트에 가려지는가

예를 들어, 게임 오브젝트의 위치에서 오른쪽으로 2f만큼 레이를 시각화하면 다음과 같다.

private void Update()
{
    Debug.DrawRay(transform.position, Vector2.right * 2f, Color.green);
}

그러나 DrawLine()과의 중요한 차이점은 두 번째 인자가 방향 벡터라는 점이다.
게임 오브젝트의 위치와는 관계 없이 레이의 방향은 변하지 않는다.



마무리

유니티에서 C# 스크립팅을 하면서 사용할 법한 Debug 클래스의 메서드를 정리해봤다.
이 글에서 소개한 메서드 이외에 많은 정적 메소드가 존재하기에 더 알고 싶은 정보가 있으면 공식 문서를 참고하자.

profile
Game Client Programmer

0개의 댓글