개요
언리얼 엔진(Unreal Engine)에서 기본적으로 제공되는 콘솔 명령어도 있겠지만, 이번에 할 이야기는 개발을 하다보면 테스트를 위한 함수호출이나 인게임에서의 특정 수치 변경이 필요할 때가 발생할 경우, 직접 지정한 콘솔 명령어(Console Command)와 콘솔 변수(Console Variable)를 통해 해결하는 방법을 기록하고자 한다.
콘솔명령어
콘솔 명령어는 FAutoConsoleCommand
클래스를 이용하여 지정 가능하다
생성자의 파라미터로는 (명령어 이름 / 명령어 설명 / 함수호출시 실행될 델리게이트 / 플래그 값)으로 구성되어있다.
델리게이트중에는 Argument를 받을수 있는 것도 있어 명령어에 인자값을 넣는것도 가능하다
FAutoConsoleCommand CCmd_HelloWorld(
TEXT("c.helloworld"),
TEXT("HelloWorld를 띄워보자"),
FConsoleCommandWithArgsDelegate::CreateLambda([](const TArray<FString>& Params)
{
FString ParamStr;
for (const FString& Param : Params)
ParamStr += Param;
UE_LOG(LogTemp, Log, TEXT("Hello World!! Param : [%s]"), *ParamStr);
}),
ECVF_Default);
간단히 로그를 찍는 람다를 만들어서 실행해 보았다.
콘솔 변수
콘솔 변수는 TAutoConsoleVariable
클래스를 사용한다.
생성자의 파라미터로는 (명령어 이름 / 기본 값 / 변수 설명 / 플래그 값)으로 구성되어있다.
해당 변수의 값을 가져올 때에는 GetValueOnAnyThread / GetValueOnRenderThread / GetValueOnGameThread
함수로 가져올 수 있다.
TAutoConsoleVariable<int32> CVar_TestIntVar(
TEXT("c.testintvar"),
0,
TEXT("테스트용 int 변수"),
ECVF_Default);
FAutoConsoleCommand CCmd_HelloWorld(
TEXT("c.helloworld"),
TEXT("HelloWorld를 띄워보자"),
FConsoleCommandWithArgsDelegate::CreateLambda([](const TArray<FString>& Params)
{
UE_LOG(LogTemp, Log, TEXT("Hello World!! TestIntVar : [%d]"), CVar_TestIntVar.GetValueOnAnyThread());
}),
ECVF_Default);
콘솔변수가 적용되는지 확인해보자
마치며
애셋의 프로퍼티항목이야 에디터안에서 수정하며 확인할수 있지만, 그 외의 기능에서는 콘솔 변수와 콘솔 명령어를 활용해 개발단계에서 코드 수정없이 디테일한 값을 설정하거나 테스트를 하기에 유용하다. 콘솔 명령어의 델리게이트 종류와 플래그 값의 종류 등 세세한 항목은 엔진 코드나 언리얼 문서를 통해서 확인해 보자.