
Debug 클래스를 사용하면 프로젝트가 실행되는 동안 예외가 발생하는 위치나 예상치 못한 동작을 파악하고 조사하는 데 도움이 되는 정보를 시각화할 수 있다.
Debug.Log()는 에디터의 콘솔 창에 메시지를 출력할 때 사용한다.
Debug.Log()는 object 매개변수를 받기 때문에, C#의 모든 타입을 인자로 전달할 수 있다.
하지만 유니티 내부적으로 ToString()을 호출하여 문자열로 출력하므로 결과를 예측하고 사용해야 한다.
커스텀 클래스를 출력하는 경우,
ToString()을 반드시 오버라이딩해야 한다.
private void Awake()
{
Debug.Log("Log() 호출");
Debug.Log("Log() 호출", gameObject);
}
Debug.Log()의 두 번째 인자로는 메시지와 관련이 있는 오브젝트를 전달한다.
콘솔에서 이 메시지를 클릭하게 되면 하이어라키 창에 있는 오브젝트가 하이라이트된다.

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

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

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);
}
}
}

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);
}

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

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 클래스의 메서드를 정리해봤다.
이 글에서 소개한 메서드 이외에 많은 정적 메소드가 존재하기에 더 알고 싶은 정보가 있으면 공식 문서를 참고하자.