-
[Unreal Engine] GameMode Override in C++Unreal Engine 5._ 2023. 1. 4. 13:13
GameMode를 오버라이드 하는 것으로, 게임의 토대가 되는 규칙을 정의할 수 있습니다.
이 때, GameMode는 Default Pawn, Controller, Player State등의 액터를 가질 수 있습니다.
이번 글에서는 GameMode를 C++로 생성했을 때, 그의 일부가 되는 액터들을 오버라이드 하는 방법을 다루어보도록 하겠습니다.
1. GameMode & GameModeBase
더보기GameModeBase는 언리얼 엔진 4.14에 소개된 클래스입니다.
기존의 GameMode를 단순화 및 효율화한 클래스입니다.
GameMode는 GameModeBase의 하위 클래스로 분류되었으며, 만들고자 하는 게임의 유형에 따라 적절한 클래스를 선택할 수 있게 되었습니다.
자세한 내용은 공식 문서를 참조해주세요
Game Mode and Game State (Unreal Engine Documentation)
2. Override C++ Classes
더보기C++ GameMode에서 C++클래스를 오버라이드 하는 방법은 단순합니다.
MyGameMode.cpp
AMyGameMode::AMyGameMode() { PlayerStateClass = AMyPlayerState::StaticClass(); /* DefaultPawnClass = ... HUDClass = ... PlayerControllerClass = ... GameStateClass = ... SpectatorClass = ... */ }
위와 같이, 오버라이드 할 클래스를 생성자에서 지정해주는 것으로 완료됩니다.
3. Override Blueprint Classes
더보기블루프린트 클래스를 오버라이드 하는 것 또한 단순하지만, C++보다는 추가적인 작업이 필요합니다.
MyGameMode.cpp
#include <UObject/ConstructorHelpers.h> AMyGameMode::AMyGameMode() { static ConstructorHelpers::FClassFinder<APawn> MyPawn( TEXT("Blueprint'/Directory/MyPawn.MyPawn_C'") ) if(MyPawn.Succeeded()) DefaultPawnClass = MyPawn.Class; /* HUDClass = ... PlayerControllerClass = ... GameStateClass = ... PlayerStateClass = ... SpectatorClass = ... */ }
블루프린트의 경우, ConstructionHelpers가 필요합니다.
ConstructionHelpers의 ClassFinder로 해당 Blueprint의 경로를 가져오는 방법은 다음과 같습니다.
해당 블루프린트를 컨텐츠 드로어에서 우클릭 후, Copy Refenrece 를 클릭하면 클립보드에 경로가 복사됩니다.
복사된 문자열은 다음과 같은 형태를 할 수 있습니다
Blueprint'/Directory/MyPawn.MyPawn'
이와 같은 형태는 오브젝트를 참조하게 되므로, 클래스를 사용하기 위해서는 '_C'를 붙여야 합니다.
Blueprint'/Directory/MyPawn.MyPawn_C'
요약하면, 블루프린트의 레퍼런스에 '_C'를 붙인 후, ConstructionHelpers의 ClassFinder로 참조하여 사용할 수 있습니다.
블루프린트와 C++은 거의 유사하지만, 사용법이 조금 다른 경우가 있습니다.
이번 글의 주제인 게임모드의 오버라이드 또한 그렇고, 블루프린트의 노드와 C++의 함수 또한 동일한 기능을 하지만 사용법은 조금 다른 경우들이 있습니다.
어렵지는 않지만 헷갈릴 수 있는 부분이니, 숙지할 필요보다는 자료를 남길 필요가 있다고 생각되어 글을 남깁니다.
이 글이 도움이 되었기를 바랍니다.
감사합니다.
'Unreal Engine 5._' 카테고리의 다른 글
[Unreal Engine] SetTimer() : C++ & Blueprint (0) 2023.01.19 [Unreal Engine] Forums : BeginPlay execution order (0) 2023.01.11 [Unreal Engine] C2027 : use of undefine type 'AHUD' (0) 2022.12.26 [Unreal Engine] C++ : Log를 남기는 여러가지 방법 (0) 2022.12.06 [Unreal Engine] Spawn actor with parameters (0) 2022.10.18