WSL 2 で MLAPI.Relay サーバをとりあえず簡単に立てて,MLAPI.Relay サーバ経由でMLAPIマルチプレイを試してみました.
以下,出来たツイート. 黒河さんのMLAPIサンプルプロジェクトを利用.右上に Relay IP と Relay Port が表示されているので成功している.
WSL 2 で MLAPI.Relay Server を立ち上げて MLAPI.Relay Server 経由でマルチプレイできた pic.twitter.com/XWNMwUM8K6
— Denik (@xrdnk) 2021年2月9日
検証環境
- Visual Studio 2019 デスクトップアプリ開発インストール済
- Windows Subsystem for Linux 2(WSL 2) 導入済
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 デバッグビルド手順
以下をクローンします.
軽く確認のため,デバッグビルドを行います. クローン後,ソリューションファイルを開きます. MLAPI.Relay を選択して,Build を実行します.
Build が Completed になったら,実行します.
するとこのような画面が出てきます. どのトランスポートを利用するかを選択します.ここではUNetを選択した場合を説明します. [U]ボタンを押下します.
今回は MLAPI を利用するので,[M]ボタンを押下します. すると最初はエラーが生じると思います.これは依存しているモジュールが不足してるためです.
一度ソリューションを閉じます.
MLAPI.Relay > MLAPI.Relay > Libs フォルダを開きます.中身を全てコピーします.
MLAPI.Relay > MLAPI.Relay > bin > Debug > netcoreapp2.0 フォルダを開きます. ここで先ほどLibsフォルダでコピーしたファイルを「ファイルは置換せずスキップする」でペーストします.
この状態で再度ソリューションファイルを開いて,実行してみます. 以下のように Server started ! になったら成功です!
ここまではデバッグビルドです.まあ正直ここまでの手順は飛ばしてもかまいません. 何かエラーが起きないか確認しただけです.次のリリースビルドが本題です.
MLAPI.Relay リリースビルド
今度はリリースビルドをします. 次に,MLAPI.Relay.sln があるフォルダをカレントディレクトリとして,コマンドプロンプトを開きます.
dotnet publish -c Release -r linux-x64 --self-contained true
と打ちます.Enterを押下します.
コマンドの意味としては,直球で言うと現在のディレクトリにあるソリューションをReleaseでビルドし, linux-x64 ランタイム自己完結型で展開するという意味です.
dotnet publish コマンド - .NET CLI | Microsoft Docs .NET Core CLI を使用してアプリを発行する - .NET | Microsoft Docs .NET Runtime Identifier (RID) カタログ | Microsoft Docs
暫く待ちます.
再度コマンドが出来るようになったら,Releaseビルドが出来ているかフォルダを見返します. MLAPI.Relay\MLAPI.Relay\bin\Release\netcoreapp2.0\linux-x64\publish フォルダが出来ていればOKです.
デバッグビルド時と同じ要領で,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鯖接続をオンにして,マルチプレイ出来るようにします.
サンプルプロジェクトはこちらからダウンロードできます.
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 鯖が立ち上がります.
以下の作業は最初あたりに行った作業と同じなので随時進めていきます.
[INFO] Server Started ! になればOKです.
黒河さんのサンプルの方でも以下のようにRelay鯖へのつなぎ方の説明されていますので,以降はこれに沿います. MLAPI Unitychan Sample - UnityList
ホスト側の接続
WSL 2 で MLAPI.Relay を立ち上げているので,Relay IP は自身のIPアドレスと同じです.ポート番号は異なります.
上記の画像で,Relay IP には 「あなたのIPアドレスは,xxx.xxx.xxx.xxx」と同じアドレスを入力します. Relay Port には 8888 を入力しておきます.
接続先IPとポート番号は空欄でもかまいません.もし空欄で[Hostとして起動]ボタンを押下した場合, 自動的に「あなたのIPアドレスは,xxx.xxx.xxx.xxx」と同じアドレスになります. また,ポート番号はランダムに生成されます.今回は画像のような感じでアドレスとポート番号を入力しました.
これで接続します.接続完了後に右上にUIが出てきます. Relay IP と Relay Port が表示されていたら Relay 鯖経由接続が成功しています.
ちなみにコマンドプロンプトの方も確認すると一番下のように, 192.168.137.1:7777 から Server Started ! してるという通知が出ています.
クライアント側の接続
ホスト側の接続時に表示された右上のUIの情報をもとに,接続先IP,ポート番号,Relay IP,Relay Port を入力します.
無事に接続できれば,カンタンマルチプレイ完了です!
ちなみにクライアント側が接続しようとすると,コマンドプロンプトの方では以下のように通知されます.
もし接続がうまくいけば,Connection Approved までは出ますが,接続に失敗する場合は表示されません. その場合は接続先IP,ポート番号,Relay IP,Relay Port に相違ないか再度確認してみてください.
終わりに
結構ガバガバな感じで WSL 2 で MLAPI.Relay Server を立てましたが, 実際に運用するならちゃんとサーバを立てるべしでしょう.
本記事では MLAPI.Relay 鯖経由でマルチプレイを試してみたかったという感じです. 何か指摘や質問等あればコメントお願いします.