KoreanFoodie's Study

[언리얼] Helper Function - 로그 (Log) 2 : 화면에 출력하기 본문

Game Dev/Unreal C++ : Dev Log

[언리얼] Helper Function - 로그 (Log) 2 : 화면에 출력하기

GoldGiver 2022. 4. 19. 14:24

화면에 출력하는 로깅시스템

콘솔에 출력했던 것과 비슷하게, 이번에는 UE_LOG 가 아닌 AddOnScreenDebugMessage 함수를 활용해 화면에 값을 출력해보자. 출처는 여기!

 

CLog.h

class UE_PROJECT_NAME_API CLog
{
public:

	static void Print(int32 InValue, int32 InKey = -1, float InDuration = 10, FColor InColor = FColor::Blue);
	static void Print(float InValue, int32 InKey = -1, float InDuration = 10, FColor InColor = FColor::Blue);
	static void Print(const FString& InValue, int32 InKey = -1, float InDuration = 10, FColor InColor = FColor::Blue);
	static void Print(const FVector& InValue, int32 InKey = -1, float InDuration = 10, FColor InColor = FColor::Blue);
	static void Print(const FRotator& InValue, int32 InKey = -1, float InDuration = 10, FColor InColor = FColor::Blue);
	static void Print(const UObject* InValue, int32 InKey = -1, float InDuration = 10, FColor InColor = FColor::Blue);
	static void Print(const FString& InFileName, const FString& InFuncName, int32 InLineNumber);

}

 

CLog.cpp

DEFINE_LOG_CATEGORY_STATIC(PrintToScreen, Display, All)

void CLog::Print(int32 InValue, int32 InKey, float InDuration, FColor InColor)
{
	GEngine->AddOnScreenDebugMessage(InKey, InDuration, InColor, FString::FromInt(InValue));
}

void CLog::Print(float InValue, int32 InKey, float InDuration, FColor InColor)
{
	GEngine->AddOnScreenDebugMessage(InKey, InDuration, InColor, FString::SanitizeFloat(InValue));
}

void CLog::Print(const FString& InValue, int32 InKey, float InDuration, FColor InColor)
{
	GEngine->AddOnScreenDebugMessage(InKey, InDuration, InColor, InValue);
}

void CLog::Print(const FVector& InValue, int32 InKey, float InDuration, FColor InColor)
{
	GEngine->AddOnScreenDebugMessage(InKey, InDuration, InColor, InValue.ToString());
}

void CLog::Print(const FRotator& InValue, int32 InKey, float InDuration, FColor InColor)
{
	GEngine->AddOnScreenDebugMessage(InKey, InDuration, InColor, InValue.ToString());
}

void CLog::Print(const UObject* InValue, int32 InKey, float InDuration, FColor InColor)
{
	FString str;
	
	if (!InValue) return;

	if (!!InValue)
		str.Append(InValue->GetName());

	str.Append(!!InValue ? " Not Null" : "Null");

	GEngine->AddOnScreenDebugMessage(InKey, InDuration, InColor, str);
}

void CLog::Print(const FString& InFileName, const FString& InFuncName, int32 InLineNumber)
{
	int32 index = 0, length = 0;
	InFileName.FindLastChar(L'\\', index);

	length = InFileName.Len() - 1;
	FString fileName = InFileName.Right(length - index);

	
	FString str;
	str.Append(fileName);
	str.Append(", ");
	str.Append(InFuncName);
	str.Append(", ");
	str.Append(FString::FromInt(InLineNumber));

	GEngine->AddOnScreenDebugMessage(-1, 10, FColor::Red, str);
}

int, float, Fvector 부터 Fstring, UObject, 파일 이름까지 원하는 결과를 화면에 출력해줄 수 있다. 

위에서 !!InValue 를 쓰는 이유는, 변수를 0 또는 1로 변환해주기 위해서 사용한다. 일반적으로 0 이 아닌 어떤 변수를 1로 만들어 주기 위해 사용한다. 자세한 설명은 여기로.

Comments