• 게임
  • 산업 분야
  • 리소스
  • 커뮤니티
  • 학습
  • 문의하기
개발
Unity 엔진
모든 플랫폼 위한 2D 및 3D 게임 제작
다운로드플랜 및 가격
수익화
인앱 결제/인앱 구매(IAP)
스토어 간 IAP 검색 및 관리
Mediation
수익 / 매출 극대화 및 수익화 / 수익 창출 최적화(하다)
Ad Quality
앱 유저. '광고 지면'의 타겟 고객 경험 보호
탭조이
장기적인 유저. '광고 지면'의 타겟 고객 충성도 구축
모든 수익화 / 수익 창출 제품
사용자 확보
사용자 확보
모바일 사용자를 검색하고 Acquire
Unity 벡터 AI
적합한 게임으로 플레이어 연결
Aura 디바이스 단위 광고
최대 참여/인게이지먼트 시 기기 내 사용자 도달률
모든 성장 제품
활용 부문
3D 협업
실시간 3D 프로젝트 빌드 및 검토
몰입형 교육
몰입도 높은 환경 제작
고객 경험
인터랙티브 3D 경험 제작
모든 업계 솔루션
산업 분야
제조업
운영 우수성 확보
리테일
상점 경험을 온라인 경험으로 전환
자동차
혁신 및 차량 내 경험 향상
전체 산업 분야
테크니컬 라이브러리
기술 자료
공식 유저. '광고 지면'의 타겟 고객 매뉴얼 및 API 레퍼런스
개발자 툴
릴리스 버전 및 이슈 트래커
로드맵
예정된 기능 검토
용어집
기술 용어 라이브러리
분석 자료
활용 사례
실제 성공 사례
베스트 프랙티스 가이드
전문가 팁
모든 리소스
새로운 기능
블로그
업데이트, 정보, 기술 팁
뉴스
뉴스, 스토리, 보도 센터
커뮤니티 허브
토론
토론, 문제 해결, 소통
이벤트
글로벌 이벤트 및 현지 이벤트
커뮤니티 사례
Made with Unity
Unity 크리에이터 소개
Livestreams
개발자, 크리에이터, Insider와의 소통
Unity Awards
전 세계 Unity 크리에이터 축하
모든 레벨 지원
Unity Learn
무료로 Unity 기술 마스터
전문 교육
Unity 강사와 함께 팀의 역량을 강화하세요
Unity 처음 사용하시나요
시작하기
학습 시작하기
Unity 필수 학습 길잡이
Unity 사용이 처음이신가요? 여정 시작하기
사용법 가이드
실용적인 팁 및 베스트 프랙티스
교육
학생용
커리어 시작하기
교육 담당자 대상 교육
교육 효율 극대화
교육 라이선스
교육 기관에 Unity 강력한 기능 도입
자격증
Unity 숙련도를 입증하세요
지원 옵션
도움 받기
성공을 위한 Unity
Success 플랜
전문가 지원을 통해 더 빠르게 목표 도달률 달성
FAQ
일반적인 질문에 대한 답변
문의하기
유니티 팀과 소통하기
플랜 및 가격
언어
  • English
  • Deutsch
  • 日本語
  • Français
  • Português
  • 中文
  • Español
  • Русский
  • 한국어
소셜
통화
구매
  • 제품
  • 유니티 애즈
  • 구독
  • Unity 에셋 스토어
  • 리셀러
교육
  • 학생
  • 교육 담당자
  • 기관
  • 인증 시험
  • 레벨업 아카데미
  • Skills Development Program
다운로드
  • Unity Hub
  • 다운로드 아카이브
  • 베타 프로그램
Unity Labs
  • Labs
  • Publications
리소스
  • Unity 학습 플랫폼
  • 커뮤니티
  • 기술 자료
  • Unity QA
  • FAQ
  • Services Status
  • 활용 사례
  • Made with Unity
Unity
  • 회사
  • 뉴스레터
  • 블로그
  • 이벤트
  • 채용 정보
  • 도움말
  • Press
  • 파트너
  • 투자자
  • 어필리에이트
  • 보안
  • 소셜 임팩트
  • Inclusion & Diversity
  • 문의하기
Copyright © 2025 Unity Technologies
  • 법적 고지 사항
  • 개인정보처리방침
  • 쿠키
  • 개인정보 판매 또는 공유 금지

'Unity', Unity 로고 및 기타 Unity 상표는 미국 및 기타 국가에서 유니티 테크놀로지스 또는 계열사의 상표 또는 등록상표입니다(여기에서 자세한 정보 확인). 기타 명칭 또는 브랜드는 해당 소유자의 상표입니다.

Hero background image

Unity의 Debug 클래스를 사용하여 QA 테스트를 가속화하고 개선하세요.

이 웹페이지는 이해를 돕기 위해 기계 번역으로 제공됩니다. 기계 번역으로 제공되는 콘텐츠에 대한 정확도나 신뢰도는 보장되지 않습니다. 번역된 콘텐츠의 정확도에 관해 의문이 있는 경우 웹페이지의 공식 영어 원문을 참고해 주시기 바랍니다.
여기를 클릭하세요.

QA 및 디버깅 프로세스를 개선하는 방법을 배우려면 계속 읽어보세요.

Debug.Log 함수에 이미 익숙할 수 있지만, Unity Debug 클래스는 테스트 및 디버깅을 가속화하는 데 도움이 되는 많은 유용한 기능을 지원합니다. 이 페이지에서는 씬 및 게임 뷰에서 기즈모 시각화를 위해 Debug 클래스를 사용하는 방법, 스크립트에서 에디터의 재생 모드를 일시 중지하는 방법, 그리고 더 많은 팁을 설명합니다.

  • 오류, 경고 및 메시지
  • 스택 추적 구성하기
  • LogFormat을 사용하여 변수를 표시하세요.
  • 추가 매개변수
  • Debug.Assert 사용하기
  • Debug.Break 사용하기
  • Debug.DrawLine
  • Debug.DrawRay
  • Gizmos 사용하기
  • 예외 던지기
  • 리소스 더 보기

오류, 경고 및 메시지

Unity에 익숙하다면, 아마도 에디터에서 생성된 오류, 경고 및 기타 메시지를 표시하기 위해 Console window를 사용했을 것입니다. 또한 Debug 클래스를 사용하여 콘솔에 자신의 메시지를 출력했을 것입니다.

하지만 Debug.Log 메시지에만 국한되지 않습니다. 콘솔 창에 출력 문자열을 생성할 때, 각기 다른 아이콘 유형을 가진 세 가지 유형(오류, 경고 및 메시지) 중 하나를 지정할 수 있습니다.

세 가지 변형은 다음과 같습니다:

  • Debug.Log (“이것은 로그 메시지입니다.”)
  • Debug.LogWarning (“이것은 경고 메시지입니다.”)
  • Debug.LogError(“이것은 오류 메시지입니다.”)

콘솔 창을 사용하여 메시지를 필터링할 수 있습니다. 콘솔 창에서 오류 일시 중지를 활성화하면, Debug 클래스를 통해 콘솔에 기록한 오류가 Unity의 재생 모드를 일시 중지시킵니다.

Unity 또는 사용자의 메시지로 콘솔 창에 출력된 모든 내용은 로그 파일에 추가되어 애플리케이션에서 문제가 발생한 위치를 확인할 수 있습니다. 각 운영 체제는 로그 파일을 다른 위치에 저장하므로, 각 시스템의 사양을 확인하려면 문서를 확인하세요.

Roslyn 분석기를 사용하여 게임 코드를 디버깅하는 방법
스택 추적 옵션은 프로젝트 설정 > 플레이어에서 찾을 수 있습니다.
스택 추적 옵션은 프로젝트 설정 > 플레이어에서 찾을 수 있습니다.

스택 추적 구성하기

오류나 예외가 발생하면 콘솔 창에 스택 추적과 함께 오류 메시지가 표시되어 오류가 발생한 원인과 위치를 이해하는 데 도움이 됩니다. Debug.Log을 사용하면 콘솔에 메시지를 보낼 수 있지만, 스택 추적에 표시되는 세부 수준을 구성할 수도 있습니다.

기본적으로 콘솔의 출력은 메시지를 생성한 코드의 줄에 링크되어 있어, 항목이 나타나게 한 줄, 메서드 또는 함수 호출의 순서를 쉽게 식별할 수 있습니다.

선택한 IDE에서 스크립트가 열리지 않으면 파일 > 환경 설정 > 외부 도구로 이동하여 드롭다운에서 “외부 스크립트 편집기”를 선택하세요.

편집기에서 파일 > 빌드 설정… > 플레이어 설정… > 기타 설정을 통해 스택 추적에 표시되는 정보를 구성할 수 있습니다.

각 로그 유형에 대해 다음 옵션이 제공됩니다:

  • 없음: 로그에 스택 추적이 출력되지 않습니다.
  • 스크립트 전용: 관리되는 스택 추적만 출력됩니다. 설정을 변경하지 않은 경우 기본 옵션입니다.
  • 전체: 네이티브 및 관리 스택 추적이 기록됩니다.

로그가 혼잡해지면 콘솔의 검색 기능을 사용하세요. 검색어를 입력하면 콘솔이 메시지를 필터링하여 일치하는 텍스트가 포함된 메시지만 표시합니다.

콘솔 메뉴 버튼을 클릭하고 메뉴에서 로그 항목 > [X] 줄을 선택하여 목록에서 각 항목의 표시 줄 수를 제어할 수 있습니다. 여기서 [X]는 각 항목에 대해 표시할 줄 수입니다.

LogFormat을 사용하여 변수를 표시하세요.

C#의 String.Format 메서드는 내장된 형식화된 변수 데이터로 문자열을 생성할 수 있게 해줍니다. Debug 클래스에는 Debug.LogFormat가 있으며, 이는 동일한 구문을 사용합니다.

첫 번째 매개변수는 형식화된 메시지 문자열입니다. 중괄호에 인덱스 값을 포함하면, 이는 해당 ToString 메서드를 사용하여 매개변수 인덱스-1로 대체됩니다. 존재하지 않으면 시스템 문자열 변환이 사용됩니다. 위의 코드 예제에서 14번째 줄, {0}는 origin.ToString()로 대체됩니다.

더 복잡한 예는 다음과 같습니다:

Debug.LogFormat("시작 시 transform.position={0}, transform.rotation={1}", transform.position, transform.rotation);

{0}는 매개변수 1, transform.position으로 대체되고 {1}는 매개변수 2, transform.rotation으로 대체됩니다. 각 경우에 Vector3 및 Quaternion 속성의 ToString 메서드가 사용됩니다. 결과는 다음과 같이 보일 것입니다:

“원점은 (0.00, 0.00, 0.00)

UnityEngine.Debug:LogFormat (string,object[])”

추가 매개변수

이러한 로그 메서드에 선택적 두 번째 매개변수를 제공하여 메시지가 특정 GameObject와 관련이 있음을 나타낼 수 있습니다:

Debug.LogWarning("I come in peace!", this.gameObject);

형식화된 변수 데이터를 표시할 때 Debug.LogFormat의 경고 및 오류 버전이 있습니다:

  • Debug.LogWarningFormat("Cube.position.x의 값은 {0:0.00}입니다.", transform.position.x)
  • Debug.LogErrorFormat("Cube.position.x의 값은 {0:0.00}입니다.", transform.position.x)

콘솔에 Debug.Logformat을 사용하여 float 값을 보내면 기본 표시가 소수점 뒤에 여섯 개의 숫자를 보여줍니다. 사용자 지정 숫자 형식 문자열로 이 동작을 제어할 수 있습니다.

Debug.LogFormat("pi = {0:0.00}", Mathf.PI);

콜론을 사용하여 형식 문자열 0.00은 값의 정수 부분, 소수 구분 기호 및 구분 기호 뒤의 두 숫자를 표시합니다. 마지막 숫자는 다음 값에 따라 익숙한 방법으로 4는 바닥으로, 5는 하늘로 반올림됩니다.

이 예에서 출력은 다음과 같습니다: pi = 3.14

게임의 자동화된 테스트를 Unity Test Framework로 실행하는 방법

Debug.Assert 사용하기

Debug.Assert()는 Debug.Log() 메서드와 유사하지만, 콘솔에 메시지를 기록하는 대신 조건을 테스트하고 조건이 거짓일 경우 오류 메시지를 표시합니다. 개발 중 가정의 유효성을 검사하고 오류를 잡는 데 사용됩니다.

Assertions는 프로그램이 예상치 못한 상태에 들어가지 않도록 확인하는 좋은 방법입니다. if 문 안에 Log를 삽입하는 것과 같습니다. 클래스 속성이 할당되는 것에 의존하는 메서드에서 작업할 때, assertion은 오류를 추적하는 데 도움이 될 수 있습니다.

Debug.Assert()가 호출되면 두 개의 매개변수를 받습니다: 테스트할 조건과 조건이 거짓일 경우 표시할 선택적 메시지입니다. 조건이 참이면 아무 일도 일어나지 않으며 프로그램은 계속 실행됩니다. 조건이 거짓이면 프로그램 실행이 중단되고 오류 메시지가 에디터에 표시됩니다.

void SetColor(Color color)

{

Debug.Assert(material != null, "ChangeColor: material not assigned");

material.SetColor("_Color", color);

}

SetColor를 호출하고 material이 할당되지 않으면 'SetColor: material not assigned'가 콘솔에 표시됩니다.

Debug.Break 사용하기

Debug.Break()는 Unity의 Debug 클래스에서 제공하는 메서드로, 게임 실행을 일시 중지하고 코드의 현재 지점에서 디버거에 들어가는 데 사용됩니다. 게임의 상태를 검사하고 코드를 한 줄씩 실행하여 버그를 찾고 수정할 수 있습니다.

Debug.Break()가 호출되면 게임 실행이 중단되고 디버거 창이 열립니다. 이것은 게임의 상태를 검사하고 필요에 따라 코드를 디버그할 수 있게 해줍니다. 디버거를 사용하여 코드를 단계별로 실행하고, 중단점을 설정하며, 메모리의 변수와 객체를 검사할 수 있습니다.

예를 들어, NPC가 플레이어 캐릭터의 목표 거리 내에 있을 때 게임을 중지하고 싶을 수 있습니다. 게임이 중단되면 검사기에서 상태를 검사할 수 있습니다:

float dist = Vector3.Distance(transform.position, npc.position);

if ( dist < 5) Debug.Break();

장면 뷰에서 Debug.DrawLine
장면 뷰에서 DEBUG.DRAWLINE

Debug.DrawLine

Debug.DrawLine과 Debug.DrawRay는 Unity의 Debug 클래스에서 제공하는 두 가지 방법으로, 시각적 디버깅에 사용됩니다. 이들은 충돌 및 레이캐스트와 같은 물리 관련 코드를 테스트하고 시각화하는 데 유용합니다. 두 방법 모두 게임 뷰와 장면 뷰 모두에서 볼 수 있는 색상 선을 그릴 수 있습니다. 예를 들어, Debug.DrawRay를 사용하여 총알의 궤적이나 레이저 빔의 경로를 시각화하고, Debug.DrawLine을 사용하여 콜라이더의 경계나 객체의 움직임을 시각화할 수 있습니다.

Debug.DrawLine은 장면의 두 점 사이에 직선을 그리는 데 사용됩니다:

Debug.DrawLine(transform.position, target.position, Color.white, 0, false);

두 개에서 다섯 개의 매개변수를 사용합니다: 시작점, 끝점, 선택적 색상. 예를 들어, 다음 코드는 시작점과 끝점 사이에 흰색 선을 그립니다:

public static void DrawLine(Vector3 start, Vector3 end, Color color = Color.white, float duration = 0.0f, bool depthTest = true);

매개변수

  • start: 선이 시작해야 하는 월드 공간의 점
  • end: 선이 끝나야 하는 월드 공간의 점
  • 색상: 선 색상
  • 소요 시간: 선을 표시하는 시간(초)입니다. 0은 선을 단일 프레임 동안 표시합니다.
  • depthTest: 선이 전경 객체에 의해 숨겨져야 하는지 여부

코드 예제에서, Skeleton GameObject에 부착된 MonoBehaviour 스크립트의 Update 메서드는 위에서 본 이미지를 생성합니다. 선은 gizmos가 활성화된 경우에만 게임 뷰에서 볼 수 있습니다. 게임 뷰 창의 오른쪽 상단에 있는 Gizmo 버튼을 클릭하여 활성화합니다. 선은 씬 뷰에서도 볼 수 있습니다.

Debug.DrawRay

DrawLine의 대안은 DrawRay입니다. Debug.DrawRay는 씬에서 지정된 원점에서 시작하여 지정된 방향으로 확장되는 광선을 그리는 데 사용됩니다. 기본적으로 무한 광선입니다. Debug.DrawRay()로 그려진 광선이 충돌체에 닿으면 교차점에서 멈추고 더 이상 진행되지 않습니다. 이 동작은 Unity에서 물체 간의 충돌을 감지하는 데 사용되는 레이캐스트와 동일합니다.

여기서 두 번째 매개변수는 선의 방향과 길이를 정의합니다. 선은 시작에서 시작 + dir까지 그려집니다:

public static void DrawRay(Vector3 시작, Vector3 dir, Color 색상 = Color.white, float 소요 시간 = 0.0f, bool 깊이 테스트 = true);

코드 예제의 매개변수는 다음과 같습니다:

  • start: 선이 시작해야 하는 월드 공간의 점
  • dir: 라인의 방향과 길이
  • 색상: 선 색상
  • 소요 시간: 라인을 표시하는 데 걸리는 시간(초); 0은 단일 프레임 동안 라인을 표시합니다.
  • depthTest: 선이 전경 객체에 의해 숨겨져야 하는지 여부

다음은 또 다른 코드 예제입니다:

Vector3 dir = transform.TransformDirection(Vector3.forward) * 3;Debug.DrawRay(transform.position, dir, Color.white, 0, false);

이 코드 예제에서 Skeleton GameObject에 첨부된 MonoBehaviour 스크립트의 Update 메서드는 위 이미지를 생성합니다. 길이가 있는 레이는 근접 테스트를 디버깅하는 데 유용할 수 있습니다. 여기서 레이 길이는 3 세계 단위입니다. 공격이 3 단위에서 시작해야 한다면, 장면에서 3 단위가 얼마나 긴지에 대한 훌륭한 시각적 테스트를 할 수 있습니다.

Unity 프로젝트를 위한 테스트 및 품질 보증 팁

기즈모 표시하기
기즈모 표시하기

Gizmos 사용하기

기즈모는 Unity에서 시각적 디버깅을 위한 강력한 도구입니다. 기즈모를 사용하면 장면 뷰에서 간단한 2D 및 3D 도형, 선 및 텍스트를 그릴 수 있어 게임 세계에서 무슨 일이 일어나고 있는지 쉽게 볼 수 있고 이해할 수 있습니다.

몇 줄의 코드로 장면 뷰에서 간단한 도형과 선을 그릴 수 있습니다. 이로 인해 게임 메커니즘을 빠르게 프로토타입하고 테스트하는 데 이상적인 도구가 됩니다. 실시간으로 그려지므로 코드 변경의 결과를 즉시 볼 수 있고 필요한 변경을 할 수 있습니다.

기즈모는 코드만으로 이해하기 어려운 복잡한 게임 메커니즘을 시각적으로 나타냅니다. 예를 들어, 기즈모를 사용하여 발사체의 경로를 나타내는 선을 그리거나 위 이미지에서 볼 수 있는 트리거 영역의 경계를 시각화할 수 있습니다.

기즈모를 사용하여 다른 팀원이 코드와 게임 메커니즘을 이해하는 데 도움이 되는 시각적 도구를 만드세요.

기즈모는 성능에 미치는 영향이 적으므로 성능을 저하시키지 않고 자유롭게 사용할 수 있습니다.

기즈모 아이콘은 장면 및 게임 뷰의 오른쪽 상단 모서리에 있습니다. 사용자 정의 기즈모를 추가하려면 OnDrawGizmos 콜백을 포함하는 스크립트를 추가해야 합니다. 아래의 코드 예제를 참조하세요. 이 스크립트는 게임 오브젝트의 위치에서 3 세계 단위 앞에 위치한 와이어프레임 큐브를 그립니다. 큐브의 크기는 Vector3 유형의 클래스 속성 vsize에 의해 정의됩니다: public Vector3 vsize = new Vector3(1f, 1f, 1f);

void OnDrawGizmos()

{

// 변환의 위치에 노란색 구를 그립니다.

Gizmos.color = Color.yellow;

Vector3 position = transform.position + transform.TransformDirection(Vector3.forward) * 3;

Gizmos.DrawWireCube(position, vsize);

}

기즈모 드롭다운을 클릭하여 가시성을 제어합니다. OnDrawGizmos 콜백이 있는 모든 스크립트가 나열됩니다.

Gizmo 클래스와 함께 유용한 다른 메서드에 대해 더 알아보려면 문서를 검토하세요.

예외 던지기

예외를 던지는 것은 프로그램 실행 중에 오류나 예외 상황이 발생했음을 나타내기 위해 프로그래밍에서 사용되는 기술입니다. 이 메서드를 사용하여 스레드가 더 이상 실행되지 않도록 하여 추가 손상을 방지할 수 있습니다.

Unity에서는 예외를 던지는 것이 다른 프로그래밍 언어와 동일한 방식으로 사용됩니다.

예외가 발생하고 코드에서 잡히지 않으면 프로그램 실행이 일반적으로 중지되고 앱에서 나가 운영 체제로 돌아갑니다. Unity에서는 프로그램 실행이 즉시 중단되고 런타임 환경이 예외를 처리할 수 있는 'catch' 블록을 찾습니다. catch 블록이 발견되지 않으면 프로그램이 종료되고 예외가 콘솔에 기록됩니다.

예외를 던지는 것은 오류 처리 로직을 프로그램의 나머지 로직과 분리할 수 있게 해주므로 더 깔끔한 코드를 작성하는 데 기여할 수 있습니다. 예외를 던짐으로써 호출자에게 문제가 발생했음을 신호할 수 있으며, 반환 값이나 전역 상태에 의존하지 않고 오류를 전달할 수 있습니다.

Unity에서 예외를 던지려면 throw 키워드 다음에 예외 객체를 사용할 수 있습니다. 예를 들어:

if (target == null)

{

throw new System.NullReferenceException("target not set!");

}

편집기에서 코드를 실행하면 발생한 오류를 포착하고 Unity나 앱이 충돌하는 대신 Debug.LogError()를 수행합니다.

Unity에서 예외를 사용하면 오류를 조기에 포착할 수 있습니다. 또한 오류가 발생한 위치와 원인에 대한 더 많은 정보를 제공하여 디버깅을 쉽게 할 수 있습니다.

최종 탭

리소스 더 보기

이 기사에서 Unity 프로젝트의 테스트, 디버깅 및 성능 개선에 대해 더 많이 배워보세요:

  • Roslyn 분석기를 사용하여 게임 코드를 디버깅하는 방법
  • 게임의 자동화된 테스트를 Unity Test Framework로 실행하는 방법
  • Microsoft Visual Studio Code로 디버깅 워크플로우를 가속화하는 방법
  • Microsoft Visual Studio 2022로 코드를 디버깅하는 방법
  • Unity 프로젝트를 위한 테스트 및 품질 보증 팁

이 전자책을 통해 Unity 개발자를 위한 고급 모범 사례 및 지침을 깊이 있게 살펴보세요:

  • Unity 게임 프로파일링 완벽 가이드
  • 모바일용 게임 성능 최적화
  • 콘솔 및 PC 게임 성능 최적화

Unity 모범 사례 허브에서 더 많은 고급 리소스를 찾아보세요.