🎮Unreal4/C++

[UE4] Log 출력, ELogVerbosity 로그 유형, __매크로__, Print 출력(AddOnScreenDebugMessage)

공대 컴린이 2023. 2. 27. 19:33
728x90

⌨️ Log 출력

프로그래밍 과정 중 꼭 필요한 Debug를 도와줄 Log 작성 코드를 셋팅해보았다.

 

CLog.h

CLog 라는 이름의 헤더파일과 cpp 파일을 각각 생성한 뒤, Log와 Print를 도와줄 static 함수들을 변수 유형별로 선언해두었다.

 

Log를 출력할 때 분류하기 유용한 카테고리는 DEFINE_LOG_CATEGORY_STATIC 명령어를 통해 생성할 수 있다.

 

DEFINE_LOG_CATEGORY_STATIC 명령어의 매개변수로는 카테고리명과, 로그유형, 로그형식을 전달해주면 된다.

로그유형과 로그형식에 따라 종류가 매우 많으므로 간단히 정리해보았다.

ELogVerbosity는 로그를 어떻게 출력할 것인지의 정보를 Enum 값으로 가져 상세 목록을 제공한다.

 ⌨️ ELogVerbosity::Enum Type - 로그 유형

  • NoLogging : 로그를 사용하지 않는다.
  • Fatal : 파일 및 에디터 로그에 빨간색으로 출력 후 프로그램 종료
  • Error : 파일 및 에디터 로그에 빨간색으로 출력
  • Warning : 파일 및 에디터 로그에 노란색으로 출력
  • Display : 파일 및 콘솔에 출력
  • Log : 파일 및 에디터 로그에 출력
  • Verbose : 로그 파일에 출력
  • VeryVerbose : 로그 파일에 상세 내용을 포함하여 출력
  • All : VeryVerbose 와 같다.

    이 아래는 Log mask 값과 특별한 Enum 값들로 직접 사용하지 않는다.
  • NumVerbosity
  • VerbosityMask
  • SetColor
  • BreakOnLog

이러한 로그 유형을 사용하여 UE_LOG  함수를 사용하면 로그를 출력할 수 있다.

 

매개변수로 카테고리, 로그 유형, 로그 형식(Format), 출력 내용을 전달하면된다.

 

이와 같은 방법으로 int32, float, FString, FVector, FRotator, UObject 의 내용을 로그로 출력해보았다.

UObject는 있으면 Not Null을 출력하고, 없으면 Null을 출력하도록 하였다.

 

이때 주의할점은 Unreal에서는 회전 순서Roll - Pitch - Yaw로 디자인의 관점에서 순서를 정의하지만, C++클래스에선 개발자의 관점에서 Pitch - Yaw - Roll 순으로 회전 순서를 출력한다.

따라서 Actor의 Z축으로 45도 회전한 후 Rotator 값을 Log로 출력하면 P = 0, Y = 45, R = 0 순서로 회전값이 출력된다.

⌨️ __FILE__, __FUNCTION__, __LINE__

__FILE__, __FUNCTION__, __LINE__ 매크로를 이용하여 액터 정보를 출력하는 Log 함수를 작성해보았다.

__FILE__ 매크로는 현재 액터가 존재하는 디렉터리를 출력하므로 가장 오른쪽에 존재하는 "\\" 문자열을 찾아 해당 문자열의 오른쪽만 자르면 "파일명.cpp" 형태의 String 값만 출력되도록 만들 수 있다.

__FUNCTION__은 현재 로그가 출력된 함수명을 출력하고,

__LINE__은 현재 코드가 실행되고 있는 라인 넘버를 출력한다.

⌨️ Print 출력

로그가 아닌 뷰포트에 Print를 수행하기 위해선 Engin.h 헤더를 포함하여 GEngin 객체의 함수를 사용해야 한다.

 

AddOnScreenDebugMessage 함수를 통해 블루프린트의 Print String 함수와 같은 기능을 수행할 수 있다.

 

InKey, InDuration, InColor 값은 헤더파일에서 디폴트 매개변수로 선언해둔채로 사용했다.

InDuration뷰포트에 띄울 지속시간, InColor글씨 색상을 의미한다.

InKey동일한 메시지가 여러 번 추가되는 것을 방지하는 고유 키 이다. 즉, 키 값을 설정하면 뷰포트에 프린트가

Print,

Print,

Print,

Print, 

형식으로 되는 것이 아니라, Print 한 위치를 기억한 뒤, 해당 위치에서 내용을 갱신하게 된다.

 

실행결과, 성공적으로 뷰포트에 Print 내용들이 출력됨을 볼 수 있었다.


참조

https://docs.unrealengine.com/4.26/en-US/API/Runtime/Core/Logging/ELogVerbosity__Type/

 

ELogVerbosity::Type

Enum that defines the verbosity levels of the logging system.

docs.unrealengine.com

https://velog.io/@cedongne/UE5-Unreal-Engine-5-%EA%B8%B8%EB%9D%BC%EC%9E%A1%EC%9D%B4-5.-%EB%A1%9C%EA%B9%85-%EB%B0%A9%EB%B2%95

 

[UE5] Unreal Engine 5 길라잡이 - 5. 로깅 방법

언리얼 엔진은 코딩의 흐름을 파악하고 디버깅을 용이하게 만들어주는 '로깅' 기능을 제공한다. 이는 일반적으로 UE_LOG라는 매크로를 활용하며, UE_LOG 매크로를 사용하고 응용하는 방법에 대해

velog.io

https://docs.unrealengine.com/5.1/en-US/API/Runtime/Engine/Engine/UEngine/AddOnScreenDebugMessage/1/

 

UEngine::AddOnScreenDebugMessage

Add a [FString](API\Runtime\Core\Containers\FString) to the On-screen debug message system.

docs.unrealengine.com

728x90