> ## 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 GSDK の ThirdPersonMP マルチプレイヤーゲームサーバーを LocalMultiplayerAgent でローカルにテスト・デバッグし、PlayFab にアップロードする前にデバッガーをアタッチします。

# ThirdPersonMP サンプルプロジェクトのローカルデプロイメントとデバッグ

このガイドの目的は、ゲームサーバーを MPS 準拠の方法でローカルマシン上で実行する方法を示すことです。これにより、PlayFab にアップロードする前にサーバーをテストしデバッグできます。

## 目標

* ThirdPersonMP+GSDK プロジェクトのローカルデプロイオプションをテストします。
* LocalMultiplayerAgent を使用して実行したときにサーバーが正しく実行されることを確認します。
* サーバーインスタンスにデバッガーをアタッチできることを確認します。

## 要件

* Visual Studio をダウンロードします。[Community 版](https://visualstudio.microsoft.com/vs/community/) は無料です。
  * 必要なワークロード: .NET デスクトップ開発と C++ によるデスクトップ開発
* Unreal Engine のソースコードをダウンロードします。手順については、[Unreal Engine ソースコードのダウンロード (外部)](https://docs.unrealengine.com/ProgrammingAndScripting/ProgrammingWithCPP/DownloadingSourceCode/) を参照してください。
* [PlayFab Unreal GSDK](/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/third-person-mp-example-gsdk-project-setup) をインストールおよび構成した [完了済みの Unreal プロジェクト](/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/third-person-mp-example-project-setup)
* Visual Studio からビルドされたプロジェクトの [「Development Server」](/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/building-the-third-person-mp-example-project) 構成
* \[オプション] [LocalMultiplayerAgent](https://github.com/PlayFab/MpsAgent/releases) をダウンロードします
  * \[オプション] または、[LocalMultiplayerAgent ソース](https://github.com/PlayFab/MpsAgent/tree/main/LocalMultiplayerAgent) をダウンロードします。
* このリポジトリから Visual Studio でビルドされた LocalMultiplayerAgent の「Debug」または「Release」構成
  * Visual Studio を使用して [MpsAgent.sln](https://github.com/PlayFab/MpsAgent/blob/main/MpsAgent.sln) を開き、Debug または Release 構成を選択し、LocalMultiplayerAgent をビルドします。
* \[オプション] [Docker for Windows](https://www.docker.com/products/docker-desktop) をインストールする

## 表記

\{depot} は、Git プロジェクトをダウンロードする場所の完全な Windows パスを指します。C:\depot、S:\depot、Z:\gitrepos など、任意の場所にすることができます。特に Unreal では、\{depot} パスをできるだけ短くすることが通常推奨されます。著者の場合、\{depot} は `M:\depot\GSDK` に解決されます。たとえば、上記の要件リストでは、以下のいくつかまたはすべてを持っている可能性があります:

* \{depot}/ThirdPersonMP
* \{depot}/MpsAgent
* \[オプション] \{depot}/gsdk \[これには以前 ThirdPersonMP にインストールした PlayFab Unreal GSDK プラグインが含まれます]
* \[オプション] \{depot}/UnrealMarketplacePlugin \[これには PlayFab Unreal Marketplace プラグインが含まれます。このガイドには必要ありませんが、ほとんどの PlayFab 機能に必要です]

これらすべてを同じ場所に置く必要はありませんが、そうする方が便利であり、整理のためにこのガイドではそうすることをお勧めします。

## 手順

### コンテナなしのローカル実行

まず、LocalMultiplayerAgent をサーバープロジェクトを実行するように構成する必要があります。最初のイテレーションでは、分離なしでローカル PC 上で直接プロセスを実行します。

Explorer で、次のファイルを見つけて開きます: `{depot}\MpsAgent\LocalMultiplayerAgent\MultiplayerSettings.json`。このガイドに重要な部分だけを抜粋したファイルは次のとおりです \[注: json 内のパスのエスケープされた \ に注意してください - これは json ファイルなので、すべての \ を \\\ としてエスケープする必要があります]:

```json theme={null}
{
  "RunContainer": false,
  "OutputFolder": "<Local absolute path that will be used to store the required output artifacts>",
  ...
  "AssetDetails": [
    {
      "MountPath": "C:\\Assets",
      "LocalFilePath": "{PATH-TO-ZIP}"
    }
  ],
  ...
  "PortMappingsList": [
    [
      {
        "NodePort": 30000,
        "GamePort": {
          "Name": "gameport",
          "Number": 8888,
          "Protocol": "UDP"
        }
      }
    ]
  ],
  "ProcessStartParameters": {
    "StartGameCommand": "{PATH-TO-EXE} -log"
  },
  "ContainerStartParameters": {
    "StartGameCommand": "C:\\Assets\\ThirdPersonMPServer.exe -log",
    ...
  }
}
```

このガイドでは、上記で `...` として省略された json ファイルの部分については、プロジェクトのデフォルトをそのまま使用してください。重要なフィールドの目的と値は次のとおりです:

* RunContainer: このガイドでは常に false です。true に設定すると Docker が必要になります。
  * true の場合、ProcessStartParameters/StartGameCommand は無視され、代わりに ContainerStartParameters/StartGameCommand が使用されます
  * true の場合、すべてがローカルマシンコンテキストではなく Docker コンテナ内でビルドおよび実行されます
  * このガイドでは、サーバープロセスをより簡単にデバッグできるように RunContainer が false の場合のシナリオを扱います
  * true に設定するには、Shipping Server ビルドと追加の [Docker for Windows](https://www.docker.com/products/docker-desktop) が必要です
* OutputFolder: `"<Local absolute path that will be used to store the required output artifacts>"`
  * この場所は完全に定義され、その場所に有効なディレクトリが存在する必要があります。
* AssetDetails/LocalFilePath: \{PATH-TO-ZIP}
  * この場所は完全に定義され、その場所に有効な zip ファイルが存在する必要があります
  * この zip ファイルには、完全に構築された「Shipping Server」ビルドが含まれている必要があります
* PortMappingsList:
  * これは Game Manager でポートを定義することの LocalMultiplayerAgent 版に相当します
  * GSDK プラグインは、gameport という名前のポートを探すようにハードコードされています
  * GSDK プラグインの [SetDefaultServerHostPort](https://github.com/PlayFab/gsdk/blob/master/UnrealPlugin/Source/PlayfabGSDK/Private/GSDKUtils.cpp#L147) メソッドは、内部の Unreal サーバーホスティングポートをこのポートに合わせるよう内部的にオーバーライドします
  * GSDK プラグインは、LocalMultiplayerAgent を使用するとき、**PortMappingsList** で構成された **gameport** という名前のポート *のみ* を使用します。
  * この json により、MPS からこのポート番号を駆動することをローカルでテストでき、GSDK プラグインが正しく受信することが保証されます
* ContainerStartParameters/StartGameCommand: RunContainer が false の場合、これは使用されません。
  * RunContainer==true の場合、ProcessStartParameters/StartGameCommand に優先します
  * このパスは Docker コンテナ内の内部パスで、AssetDetails/MountPath と AssetDetails/LocalFilePath で定義された zip ファイル内の exe への内部パスの合計になります
  * この例では次のようになります: `C:\\Assets\\ThirdPersonMPServer.exe -log`
* ProcessStartParameters/StartGameCommand: このコマンドは実質的に exe へのパスと、ゲームサーバーを起動するために使用されるコマンドライン引数になります
  * -log は、ゲームサーバーに実行ログを保存するよう指示する Unreal のコマンドです
  * \{PATH-TO-EXE} は次の 2 つの選択肢のいずれかになります:
    * ゲームサーバー (開発ゲームサーバーを含む) の exe への任意の絶対パス、およびサーバーの任意のコマンドラインパラメータ
      * この選択肢では、zip ファイルの内容は無視され、代わりに任意の場所の任意の exe が実行されます
      * これはローカルデバッグオプションで、開発ビルドをデバッグするためのローカルマシンでのみ動作します: MPS にアップロードする zip ファイルの準備ができているかを確認するのには役立ちません
      * この選択肢は、開発サーバーをテストする際に使用し、VS デバッガーをアタッチするのに適しています
      * この例では次のようになります: `{depot}\\ThirdPersonMP\\Binaries\\Win64\\ThirdPersonMPServer.exe -log`
      * 著者の場合は次のとおりです: `M:\\depot\\GSDK\\ThirdPersonMPGSDK\\Binaries\\Win64\\ThirdPersonMPServer.exe -log`
    * サーバーを実行するために zip ファイル内への相対パスを示す相対パス
      * これは、MPS クラウドインスタンスでの動作を反映する標準のワークフローです
      * この選択肢は、shipping サーバーをテストする際に使用し、zip が MPS へのアップロード準備完了であることを検証するのに役立ちます
      * この例では次のようになります: `ThirdPersonMPServer.exe -log`

zip ファイルを作成し、これらの行すべてを適切な値に設定したら、LocalMultiplayerAgent を再ビルドしてサーバーをデバッグする準備をすることができます。

### サーバーのデバッグ

Visual Studio から「Start New Instance」コマンド (通常 F5 にバインドされています) で LocalMultiplayerAgent を実行するか、`{depot}\LocalMultiplayerAgent\bin\{configuration}\netcoreapp3.1` に移動して「LocalMultiplayerAgent.exe」をダブルクリックできます。cmd ウィンドウ内から実行してデバッグログ情報を確認またはキャプチャすることもできます。

LocalMultiplayerAgent.exe を実行すると、ゲームサーバーが起動するはずです。通常、このために Task Manager を開いておくとよいでしょう。ゲームサーバーのプロセス ID は、Task Manager の Details タブで確認できます。

Task Manager で ThirdPersonMPServer プロセスが実行されているのを確認したら、Visual Studio に戻り、Debug ドロップダウン -> Attach to Process を選択します。ポップアップウィンドウから、プロセス名 ThirdPersonMPServer を検索し、Task Manager で特定した適切なプロセス ID を選択します。

この時点で、ゲームサーバーへの通常のデバッグを実行できるはずです。

注: Unreal は複数のビルド構成とサーバーをビルドする複数の方法を提供しています。最良の結果を得るには、Visual Studio から直接ビルドされた「Development Server」構成と出力を使用してください。Shipping ビルドや Development Editor からのビルドは他の状況ではうまく機能する可能性がありますが、Visual Studio から直接ビルドされた「Development Server」構成の方が Visual Studio でのアタッチとデバッグが容易です。

## トラブルシューティング

### Task Manager に複数の ThirdPersonMPServer インスタンス

複数のインスタンス (通常 3 つ以上) が表示される場合、以前の試行から残っているインスタンスを Task Manager で強制終了する必要がある場合があります。

### LocalMultiplayerAgent が 2 つの ThirdPersonMPServer インスタンスを起動する

LocalMultiplayerAgent が複数のインスタンスを *起動* する場合は、比較的高いメモリ使用量を持つプロセス ID を探してください。ゲームサーバーの一部の構成では、ペアで実行される 2 つの実行可能ファイルが生成されます。メモリ使用量が高い方にアタッチしてください。

## 次のステップ

これで、[サーバーをクラウドにデプロイ](/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/third-person-mp-example-project-cloud-deployment) する準備ができました。

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


## Related topics

- [Visual Studio を使用した PC プロジェクトのデバッグ](/ja-jp/tools/tools-pc/visualstudio/gr-vs-debugging-with-visualstudio.md)
- [Visual Studio を使用した XBOX プロジェクトのデバッグ](/ja-jp/tools/tools-console/visualstudio/debugging-with-visualstudio.md)
- [Visual Studio でリモート Windows デバイス上の PC プロジェクトをデバッグする](/ja-jp/tools/tools-pc/visualstudio/gr-vs-debugging-with-visualstudio-remote-windows.md)
- [Visual Studio 2022 GDK サポート ノート](/ja-jp/tools/tools-console/visualstudio/vs-2022-support-notes.md)
- [Unreal Engine で GDK を使用する](/ja-jp/build/gdk-and-engines/unreal/unreal.md)
