상세 컨텐츠

본문 제목

[언리얼] 콘솔 명령어 C++코드로 실행하기

프로그래밍/Unreal

by Bischoff 2020. 7. 23. 15:34

본문

언리얼 또는 언리얼에서 파생된 엔진을 통해 개발된 게임을 플레이 해봤다면 콘솔 명령어를 통해 게임의 각종 설정을 바꿀 수 있다는걸 알 수 있다.

간단히는 FPS게임을 즐기면서 FOV값을 변경하거나 개인적인 최적화를 위해 그림자 옵션을 제어하거나 할 때 사용하는 바로 그 기능이다.

게임 플레이 중 일반적인 키보드 배열을 기준으로 [1]키 왼쪽, 그리고 [Tab]키 위쪽에 위치한 [`] 키를 이용해 콘솔 입력창을 꺼내올 수 있고, 여기를 통해 엔진이나 개발자가 지원하는 각종 명령어로 게임의 설정을 제어해 좀 더 하드코어 유저를 위한 설정이 어느정도 가능하도록 설계되어있다.

게임 개발 과정에서는 게임의 옵션을 미리 프리셋으로 정해두고 단계별로 세부적인 값을 적용해 구현하는 것이 일반적인데, 그림자 옵션을 예로 들어 가장 낮은 옵션은 0, 중간 옵션은 5, 가장 높은 옵션은 10으로 설정하고 유저에게는 상, 중, 하 단계로만 노출시켜주는 것이다.

하지만 상, 중, 하 옵션을 선택하는 기준은 개발자마다 다르겠지만 일반적인 게임 플레이에 지장이 없을 정도의 값일 것이다. 화면상에 여러 캐릭터가 등장하고, 맵의 여러 개체가 노출되는 지극히 일반적인 경우를 기준으로 정의해놓았을 가능성이 높다. 그러나 일부 컷신 또는 화면에 제한적인 개체가 찍히는 환경에서는 일반적인 옵션을 이용하지 않고, 좀 더 좋은 그래픽으로 보여주고 싶은 경우가 있다.

단순히 폴리곤 수를 높인 데이터를 이용할 수도 있지만, 언리얼 엔진은 굉장히 많은 그래픽 옵션을 지원하기 때문에 옵션 제어를 함으로써 비슷한 또는 더 좋은 결과물을 보여줄 수 있다.

 

하지만 유저의 입력을 받아야 하는 이런 작업을 어떻게 하면 코드에서 호출할 수 있을까?

 

언리얼 엔진은 프로그래머가 각종 엔진 설정을 코드상에서 할 수 있도록 엔진 포인터를 전역변수 형태로 제공해준다.

ENGINE_API UEngine* GEngine = NULL;

이 포인터를 활용해 콘솔 명령어를 실행시킬 수 있다.

GEngine->Exec(GetWorld(), TEXT("FOV 100"));

위 코드를 원하는 위치에 넣으면 FOV값이 100으로 변경됨을 알 수 있다.

 

하지만 기본 옵션 값이 변경되는 명령어이므로 위에서 변경한 값이 원하는 시점 이후에도 유지되는데 원하는 시점이 끝나게 되면 원래의 값으로 되돌려 줄 필요가 있을 때는 위의 명령을 하기 전 기존 값을 가져와야할 것이다.

IConsoleVariable* cVar = IConsoleManager::Get().FindConsoleVariable(TEXT("FOV"));
if (cVar)
{
	DefaultFOV = CVar->GetFloat();
}

변경을 원하는 속성의 기존 값을 먼저 저장해둔 뒤 다시 변경을 시켜준 뒤 복구를 원하는 시점에 명령어를 통해 저장한 값으로 복구시켜주면 된다.

 

관련글 더보기