ラッパーは、標準出力と標準エラー ストリームを処理して GSDK メソッドを呼び出す回避策であり、本番用途を目的としたものではありません。
サンプルの内容
このサンプルは 2 つの .NET Core コンソール アプリケーションで構成されています。- Wrapper—PlayFab Game Server SDK (GSDK) の最新の NuGet パッケージをゲーム サーバーに統合します。このラッパー アプリケーションは 本番使用を目的としたものではありません。
- Fakegame—GSDK に関する知識を持たない基本的なゲーム サーバー。PlayFab Multiplayer Servers を使用する前に持っていた典型的なゲーム サーバーのようなものです。TCP ポート 80 をリッスンする ASP.NET Core Web サーバー Kestrel を起動します。GSDK について全く知識がないゲーム サーバーをシミュレートすることを目的としています。独自のゲーム サーバーをお持ちでない場合に使用できます。使用できる 2 つの GET ルートがあります。/hello は単純な応答を取得するためのもので、/hello/terminate はサーバーを終了できます。
要件
PlayFab Multiplayer Servers を使用および表示するには、Game Manager からこの機能を有効にする必要があります。手順については、PlayFab Server 機能の有効化 を参照してください。
ウォークスルー
このサンプルの構築のライブ ウォークスルーについては、Microsoft Game Dev 2021 のプレゼンテーションをご覧ください (2.52 頃から開始):Wrapper 実行ファイルの取得とビルド
- 標準の Git メソッドを使用するか zip ファイルとしてダウンロードして、GSDK wrapper サンプル を取得します。
- コマンド プロンプトを開き、cd コマンドで wrapper.csproj ファイルの場所にディレクトリ パスを変更します。例: cd C:/ReplaceWithYourFilePath/wrappingGsdk/wrapper
- 次に、以下の .NET Core CLI コマンドを実行します:
ゲーム サーバー アセットの作成
ゲーム サーバー アセットを作成する方法は 2 つあります。Fakegame ゲーム サーバーをラッパーと共に使用する
build.ps1 を使用して両方のプロジェクト (wrapper と fakegame) をビルドおよびパッケージ化します。このスクリプトは、必要なファイルを含む .zip ファイルを含む drop フォルダーを作成します。- PowerShell を開きます。
- cd コマンドで build.ps1 スクリプトの場所にディレクトリ パスを変更します。例: cd C:/ReplaceWithYourFilePath/wrappingGsdk/
- \build.ps1 を実行します。
- スクリプトが正常に実行された後、..\wrappingGsdk\drop\ フォルダーに移動します。fake ゲーム サーバー ビルド、ラッパー実行ファイル (前のステップでビルドしたもの)、その他の必要なファイルを含む gameassets.zip ファイルが作成されているのが確認できます。
独自のゲーム サーバー ファイルをラッパーと共に使用する
評価に自分のゲーム プロジェクトを使用するには、ラッパーとゲーム サーバー実行ファイルを同じフォルダーに配置します。- ラッパー実行ファイルのビルド の手順に従います。
- ラッパーの公開場所 ..\wrappingGsdk\wrapper\bin\Debug\netcoreapp3.1\win-x64\publish に移動します。
- 別のウィンドウで、ゲーム サーバー ビルドとゲーム サーバー ビルドの実行に必要なファイルに移動します。どのファイルが必要か分からない場合は、必要な DLL ファイルの決定 を参照してください。
- ゲーム サーバー ビルドとすべての必要なファイルをラッパーの公開場所にコピーします。
- ラッパーの公開場所のすべてのファイルを選択します。
- すべてのファイルを選択した状態で、右クリックし、送る > 圧縮 (zip) フォルダー を選択します。ラッパーの公開フォルダーを選択して zip に追加しないでください。マッピングが正しくなくなります。
Linux コンテナー イメージの作成とアップロード (Linux サーバーのみ)
Linux コンテナー イメージを作成するには、Dockerfile が必要です。Dockerfile は拡張子のないテキスト ファイルで、指定されたコンテナー イメージのビルドに必要なすべてのコマンドが含まれています。このサンプルでは、このファイルはすでに作成されています。あなたがすべきことは、コンテナー イメージをビルドして実行することだけです。 Windows 開発デバイスを使用したい場合は、Windows Subsystem for Linux (WSL) をインストールする必要があります。手順は以下に記載しています。詳細については、Windows と Linux のコンテナー イメージの違い を参照してください。- Windows 開発デバイスのセットアップ (任意)
- PlayFab コンテナー レジストリのサインイン資格情報を取得する
- 既存の/独自の Dockerfile を使用する
この手順は、FakeGame を使用しているか独自のゲーム サーバーを使用しているかによって異なります。
- FakeGame を使用している場合は、Dockerfile があることを確認します。
- 独自のゲームを使用している場合や Dockerfile を作成する必要がある場合は、Dockerfile の作成 を参照してください。FakeGame の Dockerfile を出発点として使用できます。
- Ubuntu など Docker がインストールされた Linux ターミナルを開きます。TAG および ACR 変数の値を実際の値に置き換えます。次に、以下のコマンドを実行します。
- 前のステップで取得したユーザー名とパスワードを入力します。
- Linux コンテナー イメージをビルドしてアップロードします。
Game Manager または API を使用してビルドをデプロイする
ビルドのデプロイ プロセスは、Windows と Linux のゲーム サーバーで似ています。Windows ゲーム サーバーをデプロイする
手順は Windows Runner C# サンプルと類似しています。以下に記載する違いに従って手順を実行してください。 ローカルでテストしたい場合は、ゲーム サーバーのローカル デバッグと PlayFab との統合 を参照してください。 このサンプル固有の設定- 開始コマンド:
- C:\Assets\wrapper.exe -g C:\Assets\fakegame.exe arg1 arg2 を使用します。
- 独自のゲーム サーバー ビルドを使用している場合は、fakegame.exe をゲーム サーバー実行ファイルの名前に置き換えます。
- ネットワーク構成: 名前: gameport、ポート: 80、プロトコル: TCP
- アセット: FakeGame を使用する場合は、アセットとして gameassets.zip をアップロードします。
Linux ゲーム サーバーをデプロイする
以下の一般的な手順に従ってデプロイします。 このサンプル固有の設定- アップロードしたコンテナーを選択します。
- ネットワーク構成: 名前: gameport、ポート: 80、プロトコル: TCP
- アセットのアップロードや Start Command の設定は不要です。
RequestMultiplayerServer API を使用した割り当て中、接続するポートは 80 とは異なります。これは、PlayFab Multiplayer Server サービスが Azure Load Balancer (パブリック インターネットにポートを公開するもの) と Azure 仮想マシン上で実行されるゲーム サーバーとの間のマッピングを作成するためです。
LocalMultiplayerAgent を使用してラッパーを実行する
カスタム ゲーム サーバー上で GSDK 統合をテストしたい場合は、LocalMultiplayerAgent の使用を強くお勧めします。 Windows Containers で LocalMultiplayerAgent を使用する場合、MultiplayerSettings.json ファイルを適切に構成する必要があります。以下に例があります。LocalFilePath と StartGameCommand の値に特に注意してください。fakegame.exe をゲーム サーバー実行ファイルの名前に置き換えることを忘れないでください。MPS 上のゲーム サーバーに接続する方法
MPS 上のゲーム サーバーとの接続を確立するには、適切なポート番号を決定することが不可欠です。これは、複数のゲーム サーバー インスタンスをそれぞれ実行する可能性のある複数の仮想マシンがロード バランサーの背後で管理されている構成に起因します。このようなセットアップでは、単一のパブリック IP ポートが、これらの仮想マシン上の異なるポートに対応し、それぞれが異なるゲーム サーバー インスタンスと関連付けられている可能性があります。Game Manager を使用する
Game Manager UI を使用して、ゲーム サーバーを割り当て、それに接続できます。- Game Manager にログインします。
- Multiplayer => Servers ページに移動し、ビルドを選択します。
- Servers ページに移動し、「Request server」ボタンをクリックします。
- 次のページで、パブリック IPv4 アドレス と ポート をメモします。
- curl を使用して http://[IPV4Address]:[Ports->Num]/Hello で接続します。
MPS Allocator サンプルを使用する
以下は、MPS Allocator サンプル を使用してゲーム サーバーを割り当て、接続を確立する方法です。- MPS Allocator サンプルをコンパイルして実行します。
- 「ListBuildSummaries」コマンドを適用して、利用可能なビルドとそれに対応するビルド ID を表示します。
- 「RequestMultiplayerServer」を呼び出して、ゲーム サーバー インスタンスのリクエストを開始します。
- 選択したビルド ID を「ListMultiplayerServers」コマンドに入力して、利用可能なサーバーのリストを生成します。
- アクティブなゲーム サーバー インスタンスを選択し、前のステップで取得したビルドとセッション ID を使用して「GetMultiplayerServerDetails」を実行します。
- 応答に表示される IPV4Address と Ports->Num をメモします。
- curl を使用して http://[IPV4Address]:[Ports->Num]/Hello で接続します。
