4. 게임 모드 환경설정

메인 메뉴 위젯에 사용할 게임 모드를 구성합니다.

Windows
MacOS
Linux
On this page
  1. 콘텐츠 브라우저 에서 프로젝트의 게임 모드 에 따라 블루프린트 클래스 를 추가할 것입니다. 그러면 그 두 클래스에 노출된 변수를 원하는 값으로 설정하는 것이 가능합니다. 그러기 위해서는:

    • 콘텐츠 브라우저 에서 추가 버튼을 클릭합니다.

    AddNewBPClass.png

    • 부모 클래스로 HowTo_UMGGameMode 를 선택합니다. "모든 클래스" 섹션에 있을 것입니다.

    PickParentClassForGameModeBP.png

    • 결과 블루프린트 애셋 이름을 "MenuGameMode" 라 합니다.

  2. 게임내에서 마우스 커서를 확인하기 위해서는, 게임 모드 에 했던 것처럼 플레이어 컨트롤러블루프린트 를 만들어 줘야 합니다.

    • 다시 콘텐츠 브라우저 에서 추가 버튼을 누릅니다.

    • "일반 클래스" 섹션에서 Player Controller 를 선택합니다.

    • 블루프린트 이름을 "MenuPlayerController" 라 합니다.

  3. "MenuPlayerController" 를 편집합니다.

    • "Show Mouse Cursor" (마우스 커서 표시) 박스를 체크합니다.

    GamePlayerController.png

  4. "MenuGameMode" 를 편집합니다.

    • Starting Widget Class (시작 위젯 클래스)는 반드시 "MainMenu" 애셋으로 설정해야 게임 시작시 메뉴가 뜹니다.

    • Default Pawn Class (디폴트 폰 클래스)는 DefaultPawn 이 아닌 Pawn 으로 설정해야 플레이어가 메뉴에 있을 때 날아다니지 않을 것입니다.

    • Player Controller Class (플레이어 컨트롤러 클래스)는 아까 만든 "MenuPlayerController" 애셋으로 설정해야 게임내에서 마우스 커서가 표시됩니다.

    ConfigureGameMode.png

  5. 블루프린트 를 사용하려면, 레벨 에디터 창으로 돌아와 세팅 버튼을 통해 현재 레벨 에 대한 월드 세팅 을 변경해야 합니다.

    WorldSettingsBar.png

    프로젝트 세팅 메뉴에서도 맵 & 모드 아래에서 기본 게임 모드 설정이 가능합니다. 이 방법을 사용하면 별달리 덮어쓰지 않는 한 모든 레벨의 기본 게임 모드 로 설정됩니다. 어느 방법을 사용할지는 프로젝트 구성을 어떻게 할지에 달렸습니다.

  6. 월드 세팅 패널 이 열립니다. 기본적으로 디테일 패널 에 도킹되어 있으나, 다른 데로 옮겨도 됩니다. Game Mode Override 칸을 "MenuGameMode" 애셋으로 설정해 줘야 합니다.

    WorldSettings.png

이제 레벨에 우리 메인 메뉴를 로드하고, 마우스 커서를 표시하는 플레이어 컨트롤러 를 사용하도록 환경설정된 커스텀 게임 모드 애셋이 적용되었습니다. 이제 게임을 실행하면, Quit 버튼은 예상대로 작동하나, New Game 버튼은 빈 메뉴 화면으로 이동됩니다. 다음 단계에서는 New Game 메뉴를 구성해 주겠습니다.

완성 코드

HowTo_UMG.Build.cs

// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.

using UnrealBuildTool;

public class HowTo_UMG : ModuleRules
{
    public HowTo_UMG(TargetInfo Target)
    {
        PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "UMG" });

        //PrivateDependencyModuleNames.AddRange(new string[] {  });

        // Uncomment if you are using Slate UI
        PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });

        // Uncomment if you are using online features
        // PrivateDependencyModuleNames.Add("OnlineSubsystem");
        // if ((Target.Platform == UnrealTargetPlatform.Win32) || (Target.Platform == UnrealTargetPlatform.Win64))
        // {
        //      if (UEBuildConfiguration.bCompileSteamOSS == true)
        //      {
        //          DynamicallyLoadedModuleNames.Add("OnlineSubsystemSteam");
        //      }
        // }
    }
}

HowTo_UMGGameMode.h

// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.

#pragma once

#include "Blueprint/UserWidget.h"
#include "GameFramework/GameModeBase.h"
#include "HowTo_UMGGameMode.generated.h"

/**
    * 
    */
UCLASS()
class HOWTO_UMG_API AHowTo_UMGGameMode : public AGameModeBase
{
    GENERATED_BODY()

public:
    /** Remove the current menu widget and create a new one from the specified class, if provided. */
    UFUNCTION(BlueprintCallable, Category = "UMG Game")
    void ChangeMenuWidget(TSubclassOf<UUserWidget> NewWidgetClass);

protected:
    /** Called when the game starts. */
    virtual void BeginPlay() override;

    /** The widget class we will use as our menu when the game starts. */
    UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UMG Game")
    TSubclassOf<UUserWidget> StartingWidgetClass;

    /** The widget instance that we are using as our menu. */
    UPROPERTY()
    UUserWidget* CurrentWidget;
};

HowTo_UMGGameMode.cpp

// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.

#include "HowTo_UMG.h"
#include "HowTo_UMGGameMode.h"

void AHowTo_UMGGameMode::BeginPlay()
{
    Super::BeginPlay();
    ChangeMenuWidget(StartingWidgetClass);
}

void AHowTo_UMGGameMode::ChangeMenuWidget(TSubclassOf<UUserWidget> NewWidgetClass)
{
    if (CurrentWidget != nullptr)
    {
        CurrentWidget->RemoveFromViewport();
        CurrentWidget = nullptr;
    }
    if (NewWidgetClass != nullptr)
    {
        CurrentWidget = CreateWidget<UUserWidget>(GetWorld(), NewWidgetClass);
        if (CurrentWidget != nullptr)
        {
            CurrentWidget->AddToViewport();
        }
    }
}

HowTo_UMGPlayerController.h

// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.

#pragma once

#include "GameFramework/PlayerController.h"
#include "HowTo_UMGPlayerController.generated.h"

/**
    * 
    */
UCLASS()
class HOWTO_UMG_API AHowTo_UMGPlayerController : public APlayerController
{
    GENERATED_BODY()

public:
    virtual void BeginPlay() override;
};

HowTo_UMGPlayerController.cpp

// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.

#include "HowTo_UMG.h"
#include "HowTo_UMGPlayerController.h"

void AHowTo_UMGPlayerController::BeginPlay()
{
    Super::BeginPlay();
    SetInputMode(FInputModeGameAndUI());
}
Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback