WSL 2 で MLAPI.Relay 鯖を立ち上げて MLAPI.Relay 鯖経由でマルチゲームを行う【MLAPI / MLAPI.Relay】

WSL 2 で MLAPI.Relay サーバをとりあえず簡単に立てて,MLAPI.Relay サーバ経由でMLAPIマルチプレイを試してみました.

以下,出来たツイート.
黒河さんのMLAPIサンプルプロジェクトを利用.右上に Relay IP と Relay Port が表示されているので成功している.

検証環境

WSL 2 の準備はこちらのサイトが詳しいです.
WSL 2 のインストール,Ubuntu 20.04, 18.04 のインストールと利用

  • Ubuntu 20.04 LTS
  • Unity 2019.4.17f1

MLAPI.Relayをビルドするために Visual Studio 2019 を使います.

MLAPI.Relay 説明

オープンソースな Relay Server です.
こちらと連携すればMLAPIでマッチメイキングを行うことができます.
本記事ではとりあえずMLAPI.Relayサーバの立てて,リレーサーバ経由でマルチプレイを試してみた感じです.

MLAPI.Relay デバッグビルド手順

以下をクローンします.

github.com

軽く確認のため,デバッグビルドを行います.
クローン後,ソリューションファイルを開きます.
MLAPI.Relay を選択して,Build を実行します.

f:id:xrdnk:20210209203112p:plain

Build が Completed になったら,実行します.

f:id:xrdnk:20210209203133p:plain

するとこのような画面が出てきます.
どのトランスポートを利用するかを選択します.ここではUNetを選択した場合を説明します.
[U]ボタンを押下します.

f:id:xrdnk:20210209203219p:plain

今回は MLAPI を利用するので,[M]ボタンを押下します.
すると最初はエラーが生じると思います.これは依存しているモジュールが不足してるためです.

gyazo.com

一度ソリューションを閉じます.

MLAPI.Relay > MLAPI.Relay > Libs フォルダを開きます.中身を全てコピーします.

f:id:xrdnk:20210209203947p:plain

MLAPI.Relay > MLAPI.Relay > bin > Debug > netcoreapp2.0 フォルダを開きます.
ここで先ほどLibsフォルダでコピーしたファイルを「ファイルは置換せずスキップする」でペーストします.

f:id:xrdnk:20210209204158p:plain

この状態で再度ソリューションファイルを開いて,実行してみます.
以下のように Server started ! になったら成功です!

f:id:xrdnk:20210209204431p:plain

ここまではデバッグビルドです.まあ正直ここまでの手順は飛ばしてもかまいません.
何かエラーが起きないか確認しただけです.次のリリースビルドが本題です.

MLAPI.Relay リリースビルド

今度はリリースビルドをします.
次に,MLAPI.Relay.sln があるフォルダをカレントディレクトリとして,コマンドプロンプトを開きます.

f:id:xrdnk:20210209204822p:plain

dotnet publish -c Release -r linux-x64 --self-contained true と打ちます.Enterを押下します.

f:id:xrdnk:20210209205604p:plain

コマンドの意味としては,直球で言うと現在のディレクトリにあるソリューションをReleaseでビルドし,
linux-x64 ランタイム自己完結型で展開するという意味です.

dotnet publish コマンド - .NET CLI | Microsoft Docs
.NET Core CLI を使用してアプリを発行する - .NET | Microsoft Docs
.NET Runtime Identifier (RID) カタログ | Microsoft Docs

暫く待ちます.

f:id:xrdnk:20210210004410p:plain

再度コマンドが出来るようになったら,Releaseビルドが出来ているかフォルダを見返します.
MLAPI.Relay\MLAPI.Relay\bin\Release\netcoreapp2.0\linux-x64\publish フォルダが出来ていればOKです.

f:id:xrdnk:20210209210110p:plain

デバッグビルド時と同じ要領で,MLAPI.Relay\MLAPI.Relay\Libs フォルダ内の全てのファイルをコピーします.

MLAPI.Relay > MLAPI.Relay > bin > Release > netcoreapp2.0 > linux-x64 > publish フォルダを開きます.
ここで先ほどLibsフォルダでコピーしたファイルを「ファイルは置換せずスキップする」でペーストします.

これでリリースビルドのMLAPI Relay鯖の準備が出来ました.

実際に MLAPI Relay 鯖でマルチプレイしてみる

サンプルプロジェクト

以前,Unity ステーションで黒河さんがMLAPIについて放送していましたが,
そちらのサンプルプロジェクトを利用させて頂きます.放送ではRelay鯖接続はオフでした.
本記事ではRelay鯖接続をオンにして,マルチプレイ出来るようにします.

youtu.be

サンプルプロジェクトはこちらからダウンロードできます.

unitylist.com

Relay Server 立ち上げ

先ほどリリースビルドしたフォルダをWSL 2でマウントして立ち上げます.
MLAPI.Relay\MLAPI.Relay\bin\Release\netcoreapp2.0\linux-x64 でコマンドプロンプトを立ち上げます.
wsl コマンドでマウントし,一応 chmod 755 publish/* で publish フォルダ以下に755パーミッションを付与します.
その後,./publish/MLAPI.Relay を入力すると,MLAPI.Relay 鯖が立ち上がります.

f:id:xrdnk:20210209220309p:plain

以下の作業は最初あたりに行った作業と同じなので随時進めていきます.

f:id:xrdnk:20210209220942p:plain

[INFO] Server Started ! になればOKです.

黒河さんのサンプルの方でも以下のようにRelay鯖へのつなぎ方の説明されていますので,以降はこれに沿います.
f:id:xrdnk:20210210001150p:plain MLAPI Unitychan Sample - UnityList

ホスト側の接続

WSL 2 で MLAPI.Relay を立ち上げているので,Relay IP は自身のIPアドレスと同じです.ポート番号は異なります.

f:id:xrdnk:20210210001810p:plain

上記の画像で,Relay IP には 「あなたのIPアドレスは,xxx.xxx.xxx.xxx」と同じアドレスを入力します.
Relay Port には 8888 を入力しておきます.

接続先IPとポート番号は空欄でもかまいません.もし空欄で[Hostとして起動]ボタンを押下した場合,
自動的に「あなたのIPアドレスは,xxx.xxx.xxx.xxx」と同じアドレスになります.
また,ポート番号はランダムに生成されます.今回は画像のような感じでアドレスとポート番号を入力しました.

これで接続します.接続完了後に右上にUIが出てきます.
Relay IP と Relay Port が表示されていたら Relay 鯖経由接続が成功しています.

f:id:xrdnk:20210210002355p:plain

ちなみにコマンドプロンプトの方も確認すると一番下のように,
192.168.137.1:7777 から Server Started ! してるという通知が出ています.

f:id:xrdnk:20210210002451p:plain

クライアント側の接続

ホスト側の接続時に表示された右上のUIの情報をもとに,接続先IP,ポート番号,Relay IP,Relay Port を入力します.

f:id:xrdnk:20210210003202p:plain

無事に接続できれば,カンタンマルチプレイ完了です!

f:id:xrdnk:20210210003252p:plain

ちなみにクライアント側が接続しようとすると,コマンドプロンプトの方では以下のように通知されます.

f:id:xrdnk:20210210003353p:plain

もし接続がうまくいけば,Connection Approved までは出ますが,接続に失敗する場合は表示されません.
その場合は接続先IP,ポート番号,Relay IP,Relay Port に相違ないか再度確認してみてください.

終わりに

結構ガバガバな感じで WSL 2 で MLAPI.Relay Server を立てましたが,
実際に運用するならちゃんとサーバを立てるべしでしょう.

本記事では MLAPI.Relay 鯖経由でマルチプレイを試してみたかったという感じです.
何か指摘や質問等あればコメントお願いします.