본문 바로가기

Unreal/Udemy 강의

Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 3-22

출력 로그에 기록하기

여태까지 강의를 진행하면서 오류가 발생하거나, 계산한 값들이 의도한바에 맞게 출력하는지 직접 체크하고 싶을 수 있다.

이런 게임 디버깅 체크용으로 출력 로그에 기록하는 방법을 사용할 수 있다.

 

만약 확장 프로그램인 Unreal Engine 4 Snippets를 설치했다면 Vscode에서 ulog만 쳐도 자동으로 아래와 같은 코드가 입력된다.

다음 코드를 보면 인수를 3개 받는데, 차례대로 로그 카테고리, 얼마나 시급한지를 나타내는 로그 수준, 출력 메시지이다.

이제 컴파일하고 언리얼로 돌아가 하단의 출력 로그를 살펴보자.

 

보면 우리가 작성한 로그가 5개가 출력된 것을 볼 수 있다.

이는 현재 MovingPlatform2.cpp에 대해 메시지를 표기하는 것인데, 해당 cpp에 대한 액터가 총 5개 (돌기둥 2, 푸셔 3) 가 있기 때문에 각각에 대해 출력된 것이다.

 

여기서 우리는 LogTemp를 사용했지만 다른 메시지들을 보면 LogAudioMixer, LogInit, LogWorld 등 다양하게 있는 것을 볼 수 있다.

따라서 해당 로그 카테고리를 통해 언리얼의 어느 부분에서 발생한 메시지인지 체크하는 것이 가능하다.

우리가 LogTemp를 사용한건 단순히 메시지를 출력하기 위해 임시 공간이 필요하기 때문이다.

 

또 Display도 기본 수준을 나타내기에 사용했지만, 강조를 위해 다른 것을 사용할 수도 있다.

위와 같이 Warning, Error 등을 사용하여 높은 수준의 로그를 강조하여 표시해줄 수도 있다.

참고 로그 수준 : https://docs.unrealengine.com/4.27/en-US/API/Runtime/Core/Logging/ELogVerbosity__Type/

 

ELogVerbosity::Type

Enum that defines the verbosity levels of the logging system.

docs.unrealengine.com

 

이제 사용 방법을 알았으니, 본격적인 테스트로 MoveDistance를 출력해보자.

위 로그 메시지 내역을 보면 %f을 사용한 것을 볼 수 있다.

이는 MoveDistacne 변수 할당을 위한 포맷 지정자이다.

MoveDistance가 float 변수이기 떄문에 %f가 사용되었다.

참고 포맷 : https://cplusplus.com/reference/cstdio/printf/

 

https://cplusplus.com/reference/cstdio/printf/

function <cstdio> printf int printf ( const char * format, ... ); Print formatted data to stdout Writes the C string pointed by format to the standard output (stdout). If format includes format specifiers (subsequences beginning with %), the additional arg

cplusplus.com

 

이제 컴파일 하고 실행하면 각 액터에 대해 Move Distance를 쉽게 체크 가능하다.

 

이제 디버깅 용도로 바로 떠오르는 것이 있다.

바로 if(DistacneMoved > MoveDistacne) 식을 위해 지나치는 정도가 얼마인지 정확히 알아보기 위함이다.

이를 위해 if문 내부에 아래와 같이 체크용 변수와 로그문을 작성해주었다.

 

이제 컴파일하고 다시 출력 로그를 보면 아래와 같이 얼마나 지나치는지 쉽게 확인이 가능하다.

 

내역을 보면 7과 19등 상당히 큰 숫자가 존재하는 걸 볼 수 있다.

만약 우리가 정확히 거리를 미리 구하고 시작하지 않았다면 저만큼의 오차가 발생할 수도 있었던 것이다.