이득우 교수님의 언리얼 C++ 책을 참고해서 작성한 매크로 들인데 다른 프로젝트에서 유용히 쓸 수 있을것 같아서 여기에 공유한다.
// HACKED.h (모듈최상위 헤더)
// 이 함수가 호출된 함수의 이름과 라인을 매크로로 String화 시킴 - 출처 : 이득우의 언리얼 C++ 게임 개발의 정석
#define LOG_CALLINFO (FString(__FUNCTION__) + TEXT("(") + FString::FromInt(__LINE__) + TEXT(")"))
// 위의 CALLINFO와 함께 아무 내용이 없는 로그를 찍는 매크로 - 출처 : 이득우의 언리얼 C++ 게임 개발의 정석
#define LOG_S(Verbosity) UE_LOG(HACKED_LOG, Verbosity, TEXT("%s"), *LOG_CALLINFO)
// CALLINFO와 함께 텍스트로 로그를 찍는 매크로
#define LOG(Verbosity, Format, ...) UE_LOG(HACKED_LOG, Verbosity, TEXT("%s %s"), *LOG_CALLINFO, *FString::Printf(TEXT(Format), ##__VA_ARGS__))
// Screen에다가 LOG를 직접 찍는 매크로
#define LOG_SCREEN(Format, ...) GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT(Format), ##__VA_ARGS__))
// 위의 함수에 시간을 넣는 매크로. Tick에서 DeltaTime을 인자로 넣으면 보기 편함.
#define LOG_SCREEN_T(Time, Format, ...) GEngine->AddOnScreenDebugMessage(-1, Time, FColor::Red, FString::Printf(TEXT(Format), ##__VA_ARGS__))
// LOG에 Verbosity를 인자에서 빼고 매크로화 시킨것.
#define LOG_WARNING(Format, ...) UE_LOG(HACKED_LOG, Warning, TEXT("%s %s"), *LOG_CALLINFO, *FString::Printf(TEXT(Format), ##__VA_ARGS__))
#define LOG_ERROR(Format, ...) UE_LOG(HACKED_LOG, Error, TEXT("%s %s"), *LOG_CALLINFO, *FString::Printf(TEXT(Format), ##__VA_ARGS__))
// assert()와 거의 비슷한 용도로 사용가능한 매크로. ...에는 retval이 들어감.
#define CHECK(Expr, ...) {if(!(Expr)) {LOG(Error, "ASSERTION : %s", "'"#Expr"'"); return __VA_ARGS__;}}
위에서 사용하는 로그 카테고리는 HACKED_LOG이다.
로그 카테고리는 나중에 출력 로그 창에서 확인 할때 원하는 카테고리 종류로 쫙 볼 수 있어 부지런하게 관리하면 좋다.
로그 카테고리는 모듈 최상위 헤더(우리 게임으로 치면 HACKED.h, 우리 프로젝트의 이름은 HACKED이다.)에 로그를 아래와 같이 정의하고
// HACKED.h (모듈최상위 헤더)
DECLARE_LOG_CATEGORY_EXTERN(HACKED_LOG, Log, All);
최상위 소스에 다시한번 정의해준다.
// HACKED.cpp (모듈최상위 소스)
DEFINE_LOG_CATEGORY(HACKED_LOG);
언리얼은 로그 찍는것조차 매우 길고 거지같은데 한명이라도 더 이 매크로를 사용해서, 더 나은 삶을 살기 바라며 이 글을 마친다..
'Programming > C++ & Unreal' 카테고리의 다른 글
C++ config parser (0) | 2019.05.26 |
---|---|
언리얼4 C++ 에셋 불러오기 (0) | 2019.05.15 |
언리얼 플레이어 회전값 직접 바꾸기 (0) | 2018.03.23 |
언리얼 C++에서 경로로 에셋 불러오기. (0) | 2018.03.23 |
UPaperSpriteComponent 쓰기 (0) | 2018.03.23 |