ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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++의 함수 또한 동일한 기능을 하지만 사용법은 조금 다른 경우들이 있습니다.

    어렵지는 않지만 헷갈릴 수 있는 부분이니, 숙지할 필요보다는 자료를 남길 필요가 있다고 생각되어 글을 남깁니다.

     

    이 글이 도움이 되었기를 바랍니다.

    감사합니다.

    댓글

Designed by Tistory.