본문 바로가기

unreal engine

로깅사용과 어설션

언리얼 엔진은 로깅 환경을 위해 UE_LOG라는 매크로를 제공하고 있다.

 

UE_LOG(카테고리, 로깅 수준, 형식 문자열, 인자)

 

로그를 보려면 출력 로그를 윈도우를 통해 확인할 수 있다.

에디터 상당의 (창) > (개발자 툴)> (출력 로그) 메뉴를 선택하면 하단에 출력 로그를 확인할 수 있다. 또는 프로젝트의 Saved 폴더 내에 있는 log폴더를 확인하면 된다.

 

로그의 중요도는 메시지Log, 경고 Warning, 에러 Error 이렇게 세 가지로 나뉘어 있다. 각각 흰색 노란색 붉은색으로 윈도우 표시가 된다.

 

색상을 바꾸고 싶으면 (편집) > (에디터 개인설정) 왼쪽의 (외형) 섹션에서 로깅 수준에 대한 색상을 변경할 수 있다.

 

로그 매크로는 다양한 데이터를 하나의 문자열로 조합하도록 C의 printf와 같은 형식 문자열 기능을 지원한다.

FString 클래스를 언리얼 엔진에서는 제공을 하는데, 문자열정보를 FString 클래스에서 얻어오기 위해서는 반드시 *연산자를 사용해야한다.

 

예시코드)

ABLOG(Warning, TEXT("Actor Name : %s, ID : %d, Location X : %.3f"), *GetName(), ID, GetActorLocation().X);

 

책에서는 공용 매트로 설정을 하기 위해 ArenaBattle이라는 카테고리를 이용한 로그 카테고리를 설정한다.

 

작성 소스코드는 다음과 같다.

1) ArenaBattle.h

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once



#include "EngineMinimal.h"


//로그 출력 카테고리 정의 및 메크로 선언
/* 
함수 설명

ABLOG_S : 코드가 들어있는 파일 이름과 함수, 그리고 라인정보를 추가해 arenabattle 카테고리로 로그를 남긴다. 로그를 사용한
함수의 실행시점을 파악할 때 유용

ABLOG:ABLOG_S 정보에 형식 문자열로 추가 정보를 지정해 로그를 남긴다.
*/
DECLARE_LOG_CATEGORY_EXTERN(ArenaBattle, Log, All);
#define ABLOG_CALLINFO (FString(__FUNCTION__) + TEXT("(") + FString ::FromInt(__LINE__)+ TEXT(")"))
#define ABLOG_S(Verbosity) UE_LOG(ArenaBattle, Verbosity, TEXT("%s"), *ABLOG_CALLINFO)
#define ABLOG(Verbosity, Format, ...) UE_LOG(ArenaBattle, Verbosity, TEXT("%s%s"), *ABLOG_CALLINFO, *FString::Printf(Format, ##__VA_ARGS__))

 

2) ArenaBattle.cpp

#include "ArenaBattle.h"
#include "Modules/ModuleManager.h"


DEFINE_LOG_CATEGORY(ArenaBattle);
IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, ArenaBattle, "ArenaBattle" );

 

3) Fountain2.cpp 의 BeginPlay(); 부분

// Called when the game starts or when spawned
void AFountain2::BeginPlay()
{
	Super::BeginPlay();


	//UE log 작성선언
	//FString으로 선언된 변수에서 문자열 정보를 언어오려면 반드시 *를 지정해 주어야한다.
	ABLOG_S(Warning);
	ABLOG(Warning, TEXT("Actor Name : %s, ID : %d, Location X : %.3f"), *GetName(), ID, GetActorLocation().X);
}

추가적으로 Fountain의 #include "ArenaBattle.h"를 해주어야 한다.

 

 

어설션

어설션 코드란 ? 반드시 확인하고 넘어가야 하는 점검 코드를 의미

 

언리얼 엔진의 C++프레임워크는 상황에 따라 사용할 수 있는 어설션 구문을 제공한다. 다만 언리얼 엔진을 초기로 설치한 순간에는 디버깅 기호가 설치되어있지않기 때문에 에픽게임즈 런처를 열고 해당 엔진의 버전의 옵션을 선택해 디버깅을 위한 편집기기호를 wjrdyd해서 설치해야한다.