8
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Unity向けネットワークライブラリMirrorをLinuxサーバーにホストする

Posted at

#はじめに

Unity向けのネットワークライブラリとしてMirrorが有名です。私もローカルネットワークでのマルチプレイヤーVRアプリで使ってますが、リモートサーバーにホストして使うこともできます。一見すると難しそうですが、ネットワークの知識が殆どない私でも作れたので、多分皆さんも大丈夫です。

#Mirrorを導入してみる。

推奨Unityバージョンは2018.3.6です。作者は、LTSバージョンを使うことを強く推奨していますが、一応、Unity2019.3などでも動きます。Mirrorアセット(無料)をダウンロードしてインポートしたら、Assets/Mirror/Examples/Pong/ScenesフォルダのSceneを開いてみましょう。いわゆるPongゲームのシーンになります。

image.png

左上のClientを押すと、ゲームに参加できます。ただし、現状ではネットワーク化されてないのでゲームは始まりません。

#サーバーサイドのビルドを準備する

そこで、サーバーを準備することになります。Unity2018.3から"Server Build"が追加され、画像を表示しないHeadless Modeで動作させることが可能になりました。これをサーバーに置いて、クライアントに通信させます。

Mirrorでは、下のようにNetwork Managerコンポーネントの"Start on Headless"にチェックを入れると、Server Buildしたアプリ上では自動的にStartServer()が実行されてサーバーがスタートします。

image.png

さてここでは、公式のお勧めに従い、Linux上でサーバーを動かして、Windows上でクライアントを動かす方法をとります。そのためには、まずLinux向けにビルドする必要があります。Unityをインストールする際にLinuxをターゲットに含めていなかったら、Unity Hubからモジュールを追加しておいてください。

image.png

それがすんだら、下のようにLinuxをTarget Platformにし、"Server Build"にチェックを入れてビルドしてください。

image.png

生成されるファイルは以下の通りです。これらを、下の項で示す方法でLinux上にコピーして実行すれば、サーバー上で動作します。

image.png

Linux上でサーバー側アプリが動作している状態で、Windows側のUnity EditorをPlayし、サーバーのIPアドレス(同一マシン上ならlocalhost)を入力して画面左上のClientボタンを押すと、下のようにプレイヤーとしてゲームに入れます。

image.png

もう一台Clientを用意して同じようにサーバーに接続すればPingを遊べます。

#テスト用ホストの準備

ホスト用のサーバーを準備する方法を説明します。作者による導入方法の解説がこちらです。作者によると、Azure、Amazon、Googleのインスタンスはファイアウォールの設定がめんどくさいので、とりあえずは避けた方が良いそうです。作者が進めているのは namecheapという会社のVPSホスティングです。OSはLinux(Ubuntu)を使ってほしいとのことです。

namecheapはお安くサーバーを立てられますが、それでも無料ではないので、練習用にとりあえずローカル環境で準備できる方法を考えます。

Windows Subsystem for Linux(WSL)を使ってみる

そこで、Windows10上にLinuxインスタンスを作れるWindows Subsystem for Linux(WSL)を活用します。WSLの有効化、Ubuntuのダウンロードなどはこちらの記事のやり方で大丈夫です。導入するUbuntuはnamecheapなどでも使っている18.04LTSにしました。

image.png

Ubuntuを起動するとインストール処理の後、UNIX Username, passwordの入力を求められるので、ユーザーネームとパスワードを決めて、入力してください。そうすると、コマンドプロンプトになります。

ただし、このままだとユーザーにroot権限がないので、こちらの方法でrootのパスワードを設定し、rootでログインしてください。

ここから先は、作者による導入方法の解説の"Installing our requirements"に従って作業します。まず、

apt update
apt -y dist-upgrade
apt -y install screen tmux sudo zip unzip

このあと、ユーザーを追加する作業が書いてありますが、そちらは不要(既に上で追加済みなので)です。exitでrootでの作業を終了させてください。

このあと、作者による導入方法の解説では、WinSCPを使ったファイル転送の話が出てきますが、ローカルでファイルをやり取りするなら、エクスプローラーでパスに\\wsl$を入力すると、Ubuntu-18.04のフォルダを見ることが出来ます。

image.png

ユーザーのディレクトリは\\wsl$\Ubuntu-18.04\home\ユーザー名になります。

こちらに、UnityでLinuxをターゲットにビルドして、出来てくるファイルを直接コピーできます。ここではServer.x86_64というアプリ名としました。

image.png

次に、作者による導入方法の解説にあるとおり、以下のコマンドを実行すれば、サーバーが起動します。

sudo chmod +x ./Server.x*
./Server.x86_64

うまくいけば、こんな感じの画面が出てくるはずです。

image.png

終了させるにはCtrl+CでOKです。

ここまで準備出来たら、上でやったように、クライアントを接続させてください。WSLと同じマシンでクライアントを動かすならアドレスはlocalhost(あるいは127.0.0.1)、同じローカルネットワークの別のマシンを使うときは、ifconfigでWSLが動いてるマシンの(127.0.0.1じゃないほうの)IPアドレスを確認して使ってください。うまくいかないときは一旦Ubuntuを閉じて、やりなおしてください。

リモートサーバーをレンタルして使う

WSLを使って自信がついたら、リモートサーバーをレンタルしてみましょう。上で紹介したnamecheapを使ってみます。VPS Hostingで一番安いのは月額$11.88のコースのようです。

image.png

申し込むと、数時間後にアカウント情報などが送られてきます。とくにSSH接続に関する情報が重要です。

image.png

ここからさきは、作者による導入方法の解説のConfiguring the Linux Server (one time setup)のやり方の通りに行えば良いです。WSLでUbuntuを用意してあるので、Linux向けのやり方が使えます。つまり、

ssh root@your-server-ip

で接続し、rootのパスワードを入力してください(途中で警告が出たらyesで良いです)。うまくいくと、ubuntuにログイン出来るはずです。

image.png

あとは、作者による導入方法の解説のInstalling our requirementsの指示に従い、以下の命令を実行し

apt update
apt -y dist-upgrade
apt -y install screen tmux sudo zip unzip

次に、root以外のユーザーを追加します。

adduser your-user-name

your-user-nameは自分で選んだユーザーネームを入れてください。このユーザーネームはメモっておきましょう。
すると以下の通り、パスワードなどの情報の入力を求められます。Full NameなどはEnterキーを押せばデフォルト値が入ります。
image.png
これで、ユーザーが作れました。さらにroot権限を与えるために

adduser your-user-name sudo

も実行してください。これがおわったら、rootでの作業は終了なのでlogoutを入力してください。

こんどは、作ったユーザーでログインしましょう。

ssh your-user-name@your-server-ip

your-user-nameはさっき作ったユーザーの名前、your-server-ipはリモートサーバーのipアドレスです。実行すると、パスワードが求められるので(rootの方ではなく)先ほど設定したものを入力すればログインできます。


さて、次にビルドしたファイルのアップロードですが、エクスプローラーは使えないので、作者による導入方法の解説のCopying our built game to the serverでお薦めされているWinSCPを使います。こちらからインストールしてください。アプリを起動すると、下のように接続の設定を求められます。

image.png

転送プロトコルはSFTP, ホスト名にリモートサーバーのipアドレスを入れ、ポート番号は22で、ユーザー名とパスワードは上で作ったユーザーアカウントのものを使ってください。接続が上手くいくと、下のような画面になり、右側の方へファイルをドラッグアンドドロップすると、ファイルが転送されます。

image.png

ここから先は、WSLのUbuntuでやるのと同様に

chmod +x ./Server.x*
./Server.x86_64

でビルドを実行できます。

おわりに

自分のようなネットワーク技術の素人にとって、マルチプレイヤーゲーム用のサーバーを用意するというのは非常にハードルが高く感じられたのですが、Mirrorを使ったセットアップは非常にシンプルで驚きました。まだ使いこんで無いので、そのうち色々問題出てくるかもしれませんが、ネットワークの勉強にはちょうどよさそうです。

8
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?