【Unity】さくらのVPSをホストサーバとしてuMMORPGを動かす

高校時代にFF11にハマってから、オンラインゲームの運営か開発に携わることを夢見て10年弱。
UnityのAssetStoreを眺めていると、uMMORPGというAssetがセール中だったのを見て即ポチしてしまいました。

uMMORPGとは

uMMORPGは、UnityのMultiplayer Networking技術を使ったMMORPGのテンプレートAsset。
Multiplayer Networking

何ができるか

LAN内のプレイヤーとP2P通信、UNETを使用、Linuxのheadlessモードを使用したホストサーバ-クライアント間通信の3方式に対応していると思われ。
今回は3つ目に挙げた、Linuxのheadlessモードを使用したホストサーバ-クライアント間通信についてのメモ兼復習記事。

必要なもの

Unity

当たり前ですが、Unityのインストールが必要。
5.5b系でもok。後述するuMMORPGに対応した最低バージョンは必須。

uMMORPG

AssetStoreから購入します。セール時は25%offとかで購入可能なはず。

ホストサーバ

VPSまたは専用物理サーバが必要です。当然レンタルでok。
専用サーバはフツーにレンタルするだけでも月額がアホみたいに高いので、必要になるまでは基本的にVPSでok。
さくらのVPSなら1Gでもフツーに動作する。同接数が増えていくとどうかな?

ビルド/動作確認マシン

3Dアプリなので、できればWindowsのグラボ積んでいるPCを使用したいところ。本記事もwindows前提。
途中Linuxビルドが必要になりますが、Windowsでビルドできるので無問題。

ssh/scpツール

私はrloginを使用しました。
rloginはsshの他にドラッグ&ドロップでファイル転送できるscp機能も備えているのでラクラク。フリーソフト。
rlogin公式

やること

1 : VPSサーバの初期設定

ubuntuをインストールする。インストール手順はVPS提供元でインストールガイドがあるはずなので割愛します。
インストール後の手順
公開するポート番号を22から変える場合、その番号を控えておく。

2 : Unityプロジェクトを作成する

空のUnityプロジェクトを作成し、uMMORPGをインポート。

3 : Linuxビルドを作成する

NetworkManagerMMOのNetworkInfo/Network Addressの値を127.0.0.1に変更し、
NetworkInfo/Network Portの値を1で変更した値に変更する。
BuildSettingsからプラットフォームをLinuxに変更し、HeadlessModeのチェックを付ける。
ビルドするとhoge_Dataとhoge.x86_64が生成されるので、生成されたものをzip圧縮する。
圧縮ファイルの名前をheadless.zipに変更する。

4 : ホストサーバでアプリをheadlessモード起動する

headless.zipをユーザディレクトリ直下に配置されるようscp転送し、unzip。
hoge_Dataとhoge.x86_64が展開される。
hoge.x86_64に実行権限が付与されていないはずなので、

$ chmod +x hoge.x86_64

をしておく。

$ ./hoge.x86_64

をrloginから実行すると、headlessモードでアプリが起動する。

5 : UnityEditorからホストサーバに接続する

BuildSettingsのプラットフォーム設定をwindowsに戻す。
NetworkManagerMMOのNetworkInfo/Network Addressの値をxxx.xxx.xxx.xxx(ホストサーバのパブリックIPアドレス)に変更。
RunしてConnectボタンを押すと、キャラクターを作成できる画面に遷移すれば接続成功。

つまづきポイント

ホストサーバの設定

公開ポート番号を変更したらuMMORPG側でも変更必要。
実行ファイルのパーミッションに注意。

ファイアウォール設定

PCのファイアウォール設定をしておかないとタイムアウトになる。

タイムアウト時の挙動
Async DNS START:xxx.xxx.xxx.xxx
Async DNS Result:xxx.xxx.xxx.xxx for xxx.xxx.xxx.xxx: xxx.xxx.xxx.xxx

のログを吐いた後しばらくすると、

Client event: host=0 event=DisconnectEvent error=6
UnityEngine.Networking.NetworkIdentity:UNetStaticUpdate()

環境

  • Windows7
  • Unity v5.4.0f3
  • uMMORPGv1.43
  • Ubuntu 16.04