4.ゲーム モードの設定

Main Menu ウィジェットを使用するためにゲーム モードを設定します。

Windows
MacOS
Linux
On this page
  1. プロジェクトの Game Mode に基づいて、コンテンツ ブラウザBlueprint クラス を追加します。このクラスを追加することにより、この 2 つのクラスに公開された変数に好きな値を設定することができるようになります。以下の方法で実行します。

    • コンテンツ ブラウザ[Add (追加)] ボタンをクリックします。

    AddNewBPClass.png

    • 親クラスに HowTo_UMGGameMode を選びます。クラスが [All Classes (すべてのクラス)] セクションにリスト表示されます。

    PickParentClassForGameModeBP.png

    • 生成された Blueprint アセットに「MenuGameMode」と名前を付けます。

  2. ゲーム内にマウスカーソルを表示するには、Game Mode で作成したように、Player Controller のブループリントを作成しなくてはいけません。

    • コンテンツ ブラウザ で再度 [Add (追加)] ボタンをクリックします。

    • [Common Classes] セクションから [Player Controller] を選びます。

    • ブループリントに「MenuPlayerController」と名前を付けます。

  3. MenuPlayerController を編集します。

    • [Show Mouse Cursor (マウスカーソルを表示)] ボックスをチェックします。

    GamePlayerController.png

  4. MenuGameMode を編集します。

    • ゲームを開始したらメニューが開くように、Starting Widget クラス を MainMenu アセットに設定しなくてはいけません。

    • メニュー内をプレイヤーが飛び回らないように、Default Pawn クラスDefaultPawn ではなく Pawn に設定しなくてはいけません。

    • ゲーム内にマウスカーソルを表示するために、Player Controller クラス を既に作成した MenuPlayerController アセットに設定しなくてはいけません。

    ConfigureGameMode.png

  5. ブループリント を使用するには、[レベル エディタ] ウィンドウへ戻って、[Setting (設定)] ボタンで現在の レベルWorld Settings (ワールド設定) に変更しなくてはいけません。

    WorldSettingsBar.png

    デフォルトの ゲームモード は、[Maps and Modes] セクションの [Project Settings (プロジェクトの設定)] メニューからも設定出来ます。この設定方法を使用した場合、個別にオーバーライドしない限り、すべてのレベルは選択したゲームモードがデフォルト設定となります。どの方法を使用するかは、プロジェクトをどのように設定するかによって決まります。

  6. [World Settings (ワールド設定)] パネルが開きます。デフォルトでは [Details] パネル にドッキングしますが、別の場所へ移動することも出来ます。Game Mode Override フィールドを MenuGameMode アセットに設定します。

    WorldSettings.png

カスタムの Game Mode アセットがレベルで有効になって、メインメニューをロードするようになります。マウスカーソルを表示するプレイヤー コントローラーを使用します。ここでゲームを実行すると、[Quit] ボタンが設定通り機能して、[New Game] ボタンは空のメニュー スクリーンへ移動します。次に、New Game メニューを設定します。

完成コード

HowTo_UMG.Build.cs

// Copyright 1998-2017 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 (スレート 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:
    /** 現在のメニューウィジェットを取り除き、指定されたクラスがあればそこから新しいものを作成します */
    UFUNCTION(BlueprintCallable, Category = "UMG Game")
    void ChangeMenuWidget(TSubclassOf<UUserWidget> NewWidgetClass);

protected:
    /** Called when the game starts. (ゲーム開始時に呼び出されます) */
    virtual void BeginPlay() override;

    /** ゲーム開始時にメニューとして使用するウィジェット クラスです */
    UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UMG Game")
    TSubclassOf<UUserWidget> StartingWidgetClass;

    /** メニューとして使用するウィジェット インスタンスです */
    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