> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# GSDK プロジェクトのセットアップ

> Unreal Engine の ThirdPersonMP プロジェクトに PlayFab GSDK プラグインを追加および構成し、専用サーバービルドを PlayFab Multiplayer Servers 上でホストできるようにします。

# GSDK をプロジェクトに追加する

この記事では、既存のプロジェクトを PlayFab Multiplayer Servers (MPS) 上でホストできるようにアップグレードする方法について説明します。この手順には、Unreal プロジェクトへの PlayFab GSDK の追加と構成が含まれます。ここでの手順は、Unreal ThirdPersonMP テンプレートプロジェクトを使用して記述されています。

Unreal プロジェクトには以下の機能が必要です:

* ネットワーキング
* マルチプレイヤー
* 専用ゲームサーバー

そうでない場合は、[サンプルプロジェクトのセットアップ](/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/third-person-mp-example-project-setup) ガイドに戻り、専用サーバー機能を備えたネットワーク対応マルチプレイヤーゲームとしてプロジェクトを構成する必要があります。

## 目標

PlayFab Unreal GSDK をプロジェクトに追加および構成し、ローカルでテストして PlayFab Multiplayer Services 上で動作することを確認します。

## 要件

* Visual Studio をダウンロードします。[Community 版](https://visualstudio.microsoft.com/vs/community/) は無料です。
  * 必要なワークロード: .NET デスクトップ開発と C++ によるデスクトップ開発
* Unreal Engine のソースコードをダウンロードします。手順については、[Unreal Engine ソースコードのダウンロード (外部)](https://docs.unrealengine.com/ProgrammingAndScripting/ProgrammingWithCPP/DownloadingSourceCode/) を参照してください。
* 完了済みの [ThirdPersonMP サンプルプロジェクト](/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/third-person-mp-example-project-setup)、または同等の機能を持つプロジェクト
* [PlayFab Unreal GSDK プラグイン](https://github.com/PlayFab/gsdk/tree/master/UnrealPlugin)
* \[オプション] [PlayFab Marketplace プラグイン](https://www.unrealengine.com/marketplace/product/playfab-sdk) または [GitHub 上のソース版](https://github.com/PlayFab/UnrealMarketplacePlugin)。このプラグインは GSDK には必要ありませんが、ログインなど多くの PlayFab サービスに必要です。

## C++ 実装

### プロジェクトへのプラグイン追加

以下の手順に従って Unreal GSDK をプロジェクトに追加します:

* Unreal プロジェクトに移動します
* File Explorer を開き、ゲームのルートディレクトリに **Plugins** フォルダーを作成します。Plugins フォルダー内に **PlayFabGSDK** というフォルダーを作成します。
* **\{depot}\GSDK\gsdk\UnrealPlugin** に移動します。**UnrealPlugin** フォルダーのすべてのファイルを **Plugins/PlayFabGSDK** フォルダーにドラッグします。
* 最後に、任意のテキストエディタで `{ProjectName}.uproject` ファイルを開きます。plugins 配列に「PlayFabGSDK」プラグインを追加します。

以下の例を参照してください:

```json theme={null}
{
    "FileVersion": 3,
    "EngineAssociation": "{YourEngineVersion}",
    "Category": "",
    "Description": "",
    "Modules": [
        {
            "Name": "{ProjectName}",
            "Type": "Runtime",
            "LoadingPhase": "Default",
            "AdditionalDependencies": [
                "Engine"
            ]
        }
    ],
    "Plugins": [                    // Add this if it doesn't exist
        {                           // Add this
            "Name": "PlayFabGSDK",  // Add this
            "Enabled": true         // Add this
        }                           // Add this
    ]                               // Add this if it doesn't exist
}
```

### モジュールへのプラグインの組み込み

* \{ProjectName}.Build.cs ファイルを更新し、次のように「PlayFabGSDK」を PublicDependencyModuleNames.AddRange(); リストに追加します:

```csharp theme={null}
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay", "PlayFabGSDK" });
```

* `{ProjectName}.uproject` ファイルを右クリックし、**Switch Unreal Engine version** オプションを選択します。これで、現在使用している Unreal Engine のバージョンをすばやく確認できます。以下に示すポップアップが表示されます。Unreal Engine のバージョンがすでに source build であることが確認できた場合、変更する必要はないため、Cancel をクリックします。現在の Unreal バージョンが source build でない場合は、ドロップダウンリストから選択して OK をクリックします。

<img src="https://mintcdn.com/microsoft-4404708b/U1LR64ZWxo45eXwl/images/playfab/multiplayer/servers/server-sdks/unreal-gsdk/SelectUnrealEngineVersion.png?fit=max&auto=format&n=U1LR64ZWxo45eXwl&q=85&s=bd8e143a756f3896fe41188b23adcb34" alt="「Select Unreal Engine Version」と表示されたウィンドウを示す画像" width="253" height="137" data-path="images/playfab/multiplayer/servers/server-sdks/unreal-gsdk/SelectUnrealEngineVersion.png" />

* `{ProjectName}.uproject` ファイルを再度右クリックし、「Generate Visual Studio Project Files」を選択します。

* 最後に、Visual Studio でプロジェクトをビルドし、Development Editor 構成を選択して Editor を起動します。

<img src="https://mintcdn.com/microsoft-4404708b/U1LR64ZWxo45eXwl/images/playfab/multiplayer/servers/server-sdks/unreal-gsdk/DevelopmentEditor.png?fit=max&auto=format&n=U1LR64ZWxo45eXwl&q=85&s=e039b6ef96b11027a01432cdbd6af933" alt="Development Editor モードでビルドするオプションが表示された Visual Studio の画像" width="519" height="287" data-path="images/playfab/multiplayer/servers/server-sdks/unreal-gsdk/DevelopmentEditor.png" />

### プロジェクトのセットアップ

プロジェクトでサーバーモードを有効にすると、\{ProjectName}Server.Target.cs ファイルが作成されます。

結果は以下のようになります:

```csharp theme={null}
public class {ProjectName}ServerTarget : TargetRules
{
    public {ProjectName}ServerTarget( TargetInfo Target) : base(Target)
    {
        Type = TargetType.Server;
        DefaultBuildSettings = BuildSettingsVersion.V2;
        ExtraModuleNames.AddRange( new string[] { "{ProjectName}" } );

    // You may have additional configuration based on your server needs
    }
}
```

Windows ビルドの場合、以下のオプション構成の追加が必要になる場合があります:

```csharp theme={null}
DisablePlugins.Add("WMFMediaPlayer");
DisablePlugins.Add("AsyncLoadingScreen"); //if you are using this plugin
DisablePlugins.Add("WindowsMoviePlayer");
DisablePlugins.Add("MediaFoundationMediaPlayer");
```

注: これらの構成は Linux サーバーのビルドには無効です。

### GameInstance クラスの作成/更新

#### GameInstance クラスの作成

プロジェクトをゼロから作成しており、まだ GameInstance クラスがない場合は、まず以下の手順に従って GameInstance クラスを作成してください。すでに GameInstance クラスがあるプロジェクト (たとえば Unreal のサンプルライブラリの ShooterGame) を使用している場合は、***GameInstance クラスを変更する*** セクションに進んでください。

***

Unreal Editor で:

* **Files** を選択します
* **Create a new C++ class** を選択します
* **Show all classes** を選択します
* 検索フィールドに `GameInstance` と入力します
  * 説明どおりに直接選択することで、すべてが正しく生成され、以下で説明する関数を追加できます
* Unreal を閉じて、source build モードでもう一度 **プロジェクトファイルを生成** します
* Visual Studio を使用して、新しく作成されたファイルを開き、以下の手順に従って GameInstance クラスを変更します。

#### GameInstance クラスの変更

プロジェクトのセットアップによっては、C++ または Blueprint を使用して GameInstance クラスを変更できます。両方の方法を以下に示していますので、ニーズに合った方を選択してください。

#### C++ 実装

GameInstance クラスを見つけます。通常は \{ProjectName}GameInstance や MyGameInstance のような名前になっています。今後、GameInstance クラスは \[YourGameInstanceClassName] と表記します。

##### GameInstance ヘッダーファイルの変更

まず、include 文を確認し、GameInstance クラスのヘッダーファイル (\[YourGameInstanceClassName].h) に以下が含まれていることを確認します:

```cpp theme={null}
#include "CoreMinimal.h"
#include "Engine/GameInstance.h"
#include "MyGameInstance.generated.h"
```

\[オプション] 以下のコードを使用すると、GameInstance 専用のログチャンネルを導入できます。または、LogTemp を使用したロギングでも十分です。

```cpp theme={null}
DECLARE_LOG_CATEGORY_EXTERN(LogPlayFabGSDKGameInstance, Log, All);
```

次に、public セクションに以下の宣言を追加します: (すでに Init() 関数がある場合、追加の宣言は必要ありません)

```cpp theme={null}
public:

    virtual void Init() override;
    virtual void OnStart() override;
```

次に、メソッドの protected セクションに以下の宣言を追加します:

```cpp theme={null}
protected:

    UFUNCTION()
    void OnGSDKShutdown();

    UFUNCTION()
    bool OnGSDKHealthCheck();

    UFUNCTION()
    void OnGSDKServerActive();

    UFUNCTION()
    void OnGSDKReadyForPlayers();

};
```

##### GameInstance CPP ファイルの変更

次に、\[YourGameInstanceClassName].cpp ファイルを見つけます。

以下が含まれていることを確認します:

```cpp theme={null}
#include "[YourGameInstanceClassName].h"
#include "PlayfabGSDK.h"
#include "GSDKUtils.h"
```

ヘッダーファイルでカスタムログチャンネルを導入した場合は、以下のコードが必要です:

```cpp theme={null}
DEFINE_LOG_CATEGORY(LogPlayFabGSDKGameInstance);

```

次に、Init() 関数を見つけます。まだ Init() 関数を ***持っていない*** 場合は、次のように関数を追加します:

###### Init() 関数の作成

```cpp theme={null}
void U[YourGameInstanceClassName]::Init()
{
    FOnGSDKShutdown_Dyn OnGSDKShutdown;
    OnGSDKShutdown.BindDynamic(this, &UMyGameInstance::OnGSDKShutdown);
    FOnGSDKHealthCheck_Dyn OnGSDKHealthCheck;
    OnGSDKHealthCheck.BindDynamic(this, &UMyGameInstance::OnGSDKHealthCheck);
    FOnGSDKServerActive_Dyn OnGSDKServerActive;
    OnGSDKServerActive.BindDynamic(this, &UThirdPersonGameInstance::OnGSDKServerActive);
    FOnGSDKReadyForPlayers_Dyn OnGSDKReadyForPlayers;
    OnGSDKReadyForPlayers.BindDynamic(this, &UThirdPersonGameInstance::OnGSDKReadyForPlayers);

    UGSDKUtils::RegisterGSDKShutdownDelegate(OnGSDKShutdown);
    UGSDKUtils::RegisterGSDKHealthCheckDelegate(OnGSDKHealthCheck);
    UGSDKUtils::RegisterGSDKServerActiveDelegate(OnGSDKServerActive);
    UGSDKUtils::RegisterGSDKReadyForPlayersDelegate(OnGSDKReadyForPlayers);
}
```

***

すでに Init() 関数が **あった** 場合は、`[YourGameInstanceClassName].cpp` ファイルで、そのインスタンスが専用サーバー用かどうかを示す変数があるかを確認します。**この変数が見つかった場合**、Init() 関数の最後に以下を追加します:

###### 既存の Init() 関数の変更

```cpp theme={null}
    if (IsDedicatedServerInstance() == true)
    {
        FOnGSDKShutdown_Dyn OnGsdkShutdown;
        OnGsdkShutdown.BindDynamic(this, &UShooterGameInstance::OnGSDKShutdown);
        FOnGSDKHealthCheck_Dyn OnGsdkHealthCheck;
        OnGsdkHealthCheck.BindDynamic(this, &UShooterGameInstance::OnGSDKHealthCheck);
        FOnGSDKServerActive_Dyn OnGSDKServerActive;
        OnGSDKServerActive.BindDynamic(this, &UShooterGameInstance::OnGSDKServerActive);
        FOnGSDKReadyForPlayers_Dyn OnGSDKReadyForPlayers;
        OnGSDKReadyForPlayers.BindDynamic(this, &UShooterGameInstance::OnGSDKReadyForPlayers);

        UGSDKUtils::RegisterGSDKShutdownDelegate(OnGsdkShutdown);
        UGSDKUtils::RegisterGSDKHealthCheckDelegate(OnGsdkHealthCheck);
        UGSDKUtils::RegisterGSDKServerActiveDelegate(OnGSDKServerActive);
        UGSDKUtils::RegisterGSDKReadyForPlayers(OnGSDKReadyForPlayers);
    }
```

MPS のデフォルトポートを設定する以下の関数を呼び出して、**Init() 関数を完成させます**。

```cpp theme={null}
#if UE_SERVER
    UGSDKUtils::SetDefaultServerHostPort();
#endif
```

***

最後に、これらのメソッド実装を `[YourGameInstanceClassName].cpp` ファイルの末尾に追加します:

```cpp theme={null}
void UMyGameInstance::OnStart()
{
    UE_LOG(LogPlayFabGSDKGameInstance, Warning, TEXT("Reached onStart!"));
    UGSDKUtils::ReadyForPlayers();
}

void UMyGameInstance::OnGSDKShutdown()
{
    UE_LOG(LogPlayFabGSDKGameInstance, Warning, TEXT("Shutdown!"));
    FPlatformMisc::RequestExit(false);
}

bool UMyGameInstance::OnGSDKHealthCheck()
{
    // Uncomment the next line if you want your server to log something at every heartbeat for sanity check.
    /* UE_LOG(LogPlayFabGSDKGameInstance, Warning, TEXT("Healthy!")); */
    return true;
}

void UThirdPersonGameInstance::OnGSDKServerActive()
{
    /**
     * Server is transitioning to an active state.
     * Optional: Add in the implementation any code that is needed for the game server when
     * this transition occurs.
     */
    UE_LOG(LogPlayFabGSDKGameInstance, Warning, TEXT("Active!"));
}

void UThirdPersonGameInstance::OnGSDKReadyForPlayers()
{
    /**
     * Server is transitioning to a StandBy state. Game initialization is complete and the game
     * is ready to accept players.
     * Optional: Add in the implementation any code that is needed for the game server before
     * initialization completes.
     */
    UE_LOG(LogPlayFabGSDKGameInstance, Warning, TEXT("Finished Initialization - Moving to StandBy!"));
}
```

#### Blueprint 実装

この部分は、純粋な C++ 実装ではなく Blueprint 実装で進めることを決定した場合にのみ必要です。

* Unreal Editor で Content Browser ウィンドウを確認します
* 新しい Blueprint を格納するフォルダーを選択または作成します
* 右クリックして Blueprint クラスを作成します
* All classes ドロップダウンメニューで、GameInstance クラスを見つけます
  * この例では、Blueprint に「MyGameInstance」という名前を付けています
* Blueprint をダブルクリックします
* 左側で function フィールドにマウスをホバーし、Override ドロップダウンを選択します
* Init 関数を選択します
* グラフ内で右クリックして、すべての register GSDK 関数を追加します
* GSDK Shutdown と Maintenance Delegate については、赤い四角から線を引き出し、「Add Custom Event」を選択します
* 「Register GSDK Health Check Delegate」については、「Event Dispatchers」の「Create Event」を選択します。
* <img src="https://mintcdn.com/microsoft-4404708b/U1LR64ZWxo45eXwl/images/playfab/multiplayer/servers/server-sdks/unreal-gsdk/BlueprintAddRegisterHealthCheckDelegate.png?fit=max&auto=format&n=U1LR64ZWxo45eXwl&q=85&s=034809788a483673c44c06da1b4a5ca4" alt="PlayFab GSDK Health Check 追加" width="1909" height="1059" data-path="images/playfab/multiplayer/servers/server-sdks/unreal-gsdk/BlueprintAddRegisterHealthCheckDelegate.png" />
* 新しいノードのドロップダウンで「Create matching function」を選択します。**GSDK Health Check Delegate には戻り値があるため、これは重要です。**
* <img src="https://mintcdn.com/microsoft-4404708b/U1LR64ZWxo45eXwl/images/playfab/multiplayer/servers/server-sdks/unreal-gsdk/BlueprintRegisterHealthCheckDelegate.png?fit=max&auto=format&n=U1LR64ZWxo45eXwl&q=85&s=2fb2c95b58172f1e6ad1f1483295c7f7" alt="PlayFab GSDK Health Check 登録" width="1909" height="844" data-path="images/playfab/multiplayer/servers/server-sdks/unreal-gsdk/BlueprintRegisterHealthCheckDelegate.png" />
* 関数内で、戻り値のブール値がチェックされていることを確認します。
* <img src="https://mintcdn.com/microsoft-4404708b/U1LR64ZWxo45eXwl/images/playfab/multiplayer/servers/server-sdks/unreal-gsdk/BlueprintGSDKHealthCheckFunction.png?fit=max&auto=format&n=U1LR64ZWxo45eXwl&q=85&s=529d14dc173c83d6a75c5cd2cb508483" alt="PlayFab GSDK Health Check 関数" width="1087" height="373" data-path="images/playfab/multiplayer/servers/server-sdks/unreal-gsdk/BlueprintGSDKHealthCheckFunction.png" />
* すべてのノードを Event Init ノードに接続することを忘れないでください。
* 最後に、「ReadyforPlayers」ノードを追加して、PlayFab の準備完了信号に応答できるようにします。
* また、GSDK が期待するポートに接続するために「SetDefaultServerHostPort」ノードを追加することも忘れないでください。
* Blueprint に追加したいすべての GSDK 関数/ノードについて、新しいノードで関数名の最初の数文字を入力し、期待される GSDK 関数が候補に表示されることを確認できます。
* 最終的に、Blueprint は以下の画像と同様になるはずです。
* <img src="https://mintcdn.com/microsoft-4404708b/U1LR64ZWxo45eXwl/images/playfab/multiplayer/servers/server-sdks/unreal-gsdk/BlueprintFullGraph.png?fit=max&auto=format&n=U1LR64ZWxo45eXwl&q=85&s=b4c7da43fbe2085a2fa9d1f2a7daeddb" alt="PlayFab GSDK フルグラフ" width="2387" height="899" data-path="images/playfab/multiplayer/servers/server-sdks/unreal-gsdk/BlueprintFullGraph.png" />

## GameInstance クラスの設定

gsdk と統合するカスタム GameInstance クラスを作成した後、この新しく作成した GameInstance クラスを実際に使用するようにプロジェクトを構成する必要があります。これには、Unreal Engine エディタを使用する方法と、DefaultEngine.ini を直接編集する方法の 2 つがあります。

### Unreal Editor で

エディタでは、UI を通じてデフォルトの GameInstance を設定できます。エディタで **Edit** -> **Project Settings** に移動します。開いたウィンドウから、左側の **Maps\&Modes** に移動します。一番下までスクロールし、`GameInstanceClass` オプションを新しい GameInstance クラスに直接設定できます (誤字を避けてください。完全一致である必要があります)。

### DefaultEngine.ini で

または、DefaultEngine.ini ファイルを更新して以下の行を追加できます:

```ini theme={null}
[/Script/EngineSettings.GameMapsSettings]
GameInstanceClass=/Script/{ProjectName}.MyGameInstance
```

## Windows 専用サーバーの前提条件を含める

app-local 前提条件を含める方法には、Unreal Engine エディタを使用する方法と、DefaultGame.ini を編集する方法の 2 つがあります。

### Unreal Editor で

エディタで Edit -> Project Settings に移動します。開いたウィンドウで、左側の Packaging に移動します。リストの一番下までスクロールし、「Include app-local prerequisites」にチェックを入れます。

### DefaultGame.ini で

または、DefaultGame.ini を以下のコードで更新できます:

```ini theme={null}
[/Script/UnrealEd.ProjectPackagingSettings]
IncludeAppLocalPrerequisites=True
```

DefaultGame.ini にすでにカテゴリが存在する場合、そこに 2 行目を追加するだけです。この構成により、app local の依存関係がすべてプロジェクトとともに配布されるようになります。

継続的インテグレーション (CI) を使用している場合は、専用サーバーをビルドするときのみこのフラグをオンにするようにセットアップに追加でき、専用サーバービルドの場合にのみ前提条件の dll が追加されるようにできます。

## 次のステップ

これで、ローカルマシンで [プロジェクトをビルド](/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/building-the-third-person-mp-example-project) する準備ができました。

または、メインの [Unreal GSDK Plugin](/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk#unreal-project-build-configurations) ガイドに戻ることもできます。


## Related topics

- [GSDK サンプルプロジェクトの作成](/ja-jp/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/third-person-mp-example-project-setup.md)
- [GSDK プロジェクトのクラウドデプロイメント](/ja-jp/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/third-person-mp-example-project-cloud-deployment.md)
- [Steam と Unity を使用した PlayFab 認証のセットアップ](/ja-jp/services/playfab/identity/player-identity/platform-specific-authentication/steam-unity.md)
- [PlayFab Unreal GSDK プラグインの概要](/ja-jp/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/index.md)
- [Kongregate と Unity を使用した PlayFab 認証のセットアップ](/ja-jp/services/playfab/identity/player-identity/platform-specific-authentication/kongregate-unity.md)
