게임 개발자를 향해

[ UE5 ] Class 생성 및 Log 띄워보기 본문

언리얼 엔진/C++

[ UE5 ] Class 생성 및 Log 띄워보기

뿌단이 2023. 12. 17. 09:41

1. 사전 내용

 먼저 간단하게 언리얼 엔진의 구조에 있어 Log 창에 문자열을 출력하기 위해선

그 코드를 실행하기 위한 어떠한 객체가 필요합니다.

GameInstance 클래스를 사용해보겠습니다.

 

 

2. GameInstance 클래스란?

 일단 GameInstance가 뭔지 간단히 설명하자면,

Unreal Engine 게임 구조에서 게임마다 GameInstance 를 하나씩 들고있습니다.

GameInstance 는 게임의 데이터를 유지하고 Level간 전환 시 상태를 유지하기 위한 고수준 관리 체계이며

 

한마디로 게임을 동작시켜주는 클래스 입니다.

 

 GameInstance 를 포함한 Unreal Engine의 모든 객체들은 UObject라는 클래스를 상속받게 되는데

이 개념은 지금 주제와 거리가 있으므로 추후에  GameInstance의 자세한 설명과 함께 다뤄보겠습니다.

 

 

2. GameInstance  클래스 생성

언리얼 프로젝트를 생성하고 Editor 상단Tool -> New C++ Class 클릭합니다 .

 

 

 

여기서 All Classes를 클릭하고 GameInstance를 검색해줍니다.

GameInstance를 누르고 Next를 눌러줍니다.

 

 

 

 NameGameInstance를 상속받는 클래스를 만들어야 합니다. 새로운 클래스의 이름을 지어줍니다.

저는 TestGameInstance라고 지었습니다.

 Create Class를 눌러주게 되면 Visual Studio가 켜지며 클래스가 생성됩니다.

 

 

  ※주의사항

 Editor가 아닌 Visual에서 클래스를 생성하면 제대로 동작하지 않을 수 있습니다.

무조건 클래스를 생성할 때에는 "New C++ Class" 로 생성을 해야합니다.

 

 

 

 

프로젝트가 외부에서 수정되었다는 경고 메세지가 뜨는데 Reload All을 눌러서 전부 새로 로드해줍니다.

 

 

 

이제 헤더파일(.h)소스파일(.cpp)이 생성된 것을 볼 수 있습니다.

헤더에 Init() 함수재정의(override)합니다.

Init() 함수UGameInstance에서 인스턴스 초기화 작업을 수행하는 곳입니다.

생성 후 엔진에서 딱 한번 실행되는 함수로 이 함수 에서 Log를 찍어보겠습니다.

 

 

 

3. 코드 구현

 Editor WindowOutput Log창에 Log를 남길 것입니다.

 

 

 

이제 소스파일(.cpp)에 가서 구현부에 Log를 띄울건데 부모의 Init() 함수도 호출해주어야 합니다.

이때 UnrealEngineSuper라는 키워드를 사용하여 부모의 함수를 호출할 수 있습니다.

(객체지향 언어인 Java, C#같은 언어에서도 사용되는 키워드임.)

 

그냥 부모의 접근지정자를 사용하여 호출해주어도 상관없지만,

UnrealEngine 표준에서는 Super 키워드를 사용하는것을 권장하고 있습니다.

 

인자는 아래와 같이 3개의 인자와 가변인자로 구성이 됩니다.
UE_LOG(CategoryName, Verbosity, Format, ...)

CategoryName : 로그의 카테고리
Verbosity : 출력수준 (Log, Error, Warning 등)
Format : printf()format과 같음.

 

 

 

CategoryName은 로그의 맨 앞 LogAudioMixer 등과 같은 카테고리를 뜻합니다.

저는 LogTemp를 넣어주었습니다.

 

 

 

Filters기능을 사용하여 카테고리 별로 Log를 구분하는 용도입니다.

 

 

 

VerbosityLog의 타입입니다.

Warning을 넣어주면 노란색, Error를 넣어주면 빨간색으로 뜨는것을 확인할 수 있습니다.

 

 

 

Format은 C스타일콘솔 출력printf와 비슷하게 사용됩니다.

%d, %s, %02d, %02f 등 똑같이 사용이 가능합니다.

 

UnrealEngine에서는 텍스트 인코딩 문제MultiByte, Unicode 문자열

통일된 문자열로 관리하기 위해서 TEXT라는 메크로를 제공합니다.

 

TEXT()메크로로 Format출력할 문자열인자로 넣어주었습니다.

 

 

4. GameInstance Setting

Editor에서 Edit->Project Settings를 클릭하고

 

 

 

Maps & Modes를 클릭합니다.

 

 

 

맨 아래에 가보면 Game Instance를 설절할 수 있는 곳이 있습니다.

여기서 GameInstance를 직접 만든 TestGameInstance로 설정해줍니다.

 

 

 

 Editor 상단Window에서 Output Log를 클릭하여 Editor창에  Output Log창을 띄웁니다.

 

 

 

OutPut Log Filters에서 Show All해제하고

LogTemp를 찾아서 체크해줍니다.

 

 

 

5. 결과

이제 Editor에서 게임을 실행하면  Log가 잘 뜨는것을 확인할 수 있습니다!