RakeupGame サンプル (ServerSide)

目次

  概要
  注意事項
  カスタマイズされた MUN サーバの起動
  複数クライアント動作のための準備
  MUN クライアントをオンプレミス版 MUN サーバに接続させる
  アプリケーションの作成
  複数クライアントで動作させてみる


概要

クライアント版 RakeupGame について、サーバサイドプログラムを実装した場合の事例です。

  本サンプルは、MUN 2.0 以降公開された MUN サーバを用いて「サーバサイドプログラミング」 を行なうにあたり、
  RakeupGame(ClientSide) サンプル について、「ゲーム内データ等についてサーバサイドに処理を移行させた場合」の実装事例です。

  クライアント版 RakeupGame と同様に、このサンプルはフィールド上に置かれたアイテムに、自分のプレイヤーキャラを近づけることで収集し、
  制限時間内において、どれだけのアイテムを収集できたかを競います。
  ただ、クライアント版から移植するにあたり、いくつかのインタフェースも含め、内部実装を変更しています。


注意事項

独自に用意した「オンプレミス版 MUN サーバ」が必要です。

  本サンプルはサーバサイドプログラミングによるゲームシステムの実装を行なっておりますので、MunTestServer では動作しません
  事前に以下の項目で触れたサーバ構築を行ったうえで、オンプレミスなサーバ環境で動作させる必要があります。

    【Linux サーバで構築する場合】
       ■オンプレミス版 MUN サーバのセットアップ > オンプレミス版 MUN サーバ導入準備(Linux)


    【Windows サーバで構築する場合】
       ■オンプレミス版 MUN サーバのセットアップ > オンプレミス版 MUN サーバ導入準備(Windows)


    【MacOS サーバで構築する場合】
       ■オンプレミス版 MUN サーバのセットアップ > オンプレミス版 MUN サーバ導入準備(Mac)

現時点では、C# 版オンプレミス MUN サーバのみの提供方式を採ります

  サーバサイドプログラミングの機能の提供は、現リリース段階では C# 版 のみ提供しております。
  C++ 版のオンプレミス MUN サーバについては、現リリース段階において、サーバサイドプログラミングに必要となる各種機能が整っておりません。
  よって、このサンプルにつきましても C# 版のみ該当しますので、なにとぞご了承ください。


カスタマイズされた MUN サーバの起動

サーバサイドプログラムを実装済みの mun_room サーバを含む、各種 MUN サーバプロセスを起動する

  このサンプルを起動するためには、RakeupGame のゲームシステム(タイマー制御、衝突判定、スコア計算、etc...)について、
  既にサーバサイドプログラムを実装済みの mun_room サーバを使用しますので、それを含む、各種 MUN サーバプロセスをビルドし実行しましょう。

  下記のうち、ご利用されている MUN サーバのプラットフォームに合わせて、カーソルクリックしてください。
1. 頒布している MUN サーバパッケージの解凍先ディレクトリ内の mun_server/csharp ディレクトリにある
  appsettings.json をテキストエディタで開きます。
2. appsettings.json 内の 28 行目~ 30 行目付近に記述されている、
  "PUBLIC_IP_ADDRESS" 群内の
    ・ "PROXY_PUBLIC_ADDR"
    ・ "RESOLVER_PUBLIC_ADDR"
    ・ "ROOM_PUBLIC_ADDR"
  の3項目について、value の代入値を、ご使用している WindowsPC の IPアドレスに合わせて変更します。
    ※ 以下は、WindowsPC の IP アドレスが 192.168.1.253 の場合の設定です。
1. 頒布している MUN サーバパッケージの解凍先ディレクトリ内の mun_server/csharp/mun_master ディレクトリを開き、
  その中のmun_master_vs2017_x64.sln を開いてください。
2. Visual Studio でソリューションファイルを開いた後、メニューから [デバッグ] > [デバッグ開始] を選択するか、
  キーボードから F5 ボタンを押し、ソリューションのビルド&実行を行ないます。
3. 実行後、以下のように「mun_master setup done.」と表示されれば、実行に成功していますので、次に進んでください。
1. 頒布している MUN サーバパッケージの解凍先ディレクトリ内の mun_server/csharp/mun_resolver ディレクトリを開き、
  その中の mun_resolver_vs2017_x64.sln を開いてください。
2. Visual Studio でソリューションファイルを開いた後、メニューから [デバッグ] > [デバッグ開始] を選択するか、
  キーボードから F5 ボタンを押し、ソリューションのビルド&実行を行ないます。
3. 実行後、以下のように「mun_resolver setup done.」と表示されれば、実行に成功していますので、次に進んでください。
1. 頒布している MUN サーバパッケージの解凍先ディレクトリ内の mun_server/csharp/mun_proxy ディレクトリを開き開き、
  その中の mun_proxy_vs2017_x64.sln を開いてください。
2. Visual Studio でソリューションファイルを開いた後、メニューから [デバッグ] > [デバッグ開始] を選択するか、
  キーボードから F5 ボタンを押し、ソリューションのビルド&実行を行ないます。
3. 実行後、以下のように「mun_proxy setup done.」、および「connect succeeded : mun_master_server」、
  「connect succeeded : mun_resolver_server」と表示されれば、実行に成功していますので、次に進んでください。
1. 頒布している MUN サーバパッケージの解凍先ディレクトリ内の mun_server/csharp/mun_room_rakepupgame_serverside ディレクトリを開きます。
   ※ mun_server/csharp/mun_room ディレクトリではありませんのでご注意ください。

2. ディレクトリ内の mun_room_vs2017_x64.sln を開いてください。
3. Visual Studio でソリューションファイルを開いた後、メニューから [デバッグ] > [デバッグ開始] を選択するか、
  キーボードから F5 ボタンを押し、ソリューションのビルド&実行を行ないます。
4. 実行後、以下のように「mun_room setup done.」、および「connect succeeded : mun_master_server」と表示されれば、
  実行に成功していますので、次の 複数クライアント動作のための準備 の項目を進めてください。
1. 頒布している MUN サーバパッケージの解凍先ディレクトリ内の mun_server/csharp ディレクトリにある
  appsettings.json をテキストエディタで開きます。

2. appsettings.json 内の 28 行目~ 30 行目付近に記述されている、
  "PUBLIC_IP_ADDRESS" 群内の
    ・ "PROXY_PUBLIC_ADDR"
    ・ "RESOLVER_PUBLIC_ADDR"
    ・ "ROOM_PUBLIC_ADDR"
  の3項目について、value の代入値を、ご使用している LinuxPC の IPアドレスに合わせて変更します。
    ※ 以下は、LinuxPC の IP アドレスが 192.168.1.253 の場合の設定です。
1. Linux のターミナルで、MUN サーバパッケージの解凍先ディレクトリ内の mun_server/csharp ディレクトリを開き、
  その中の mun_rakeup_game.sh を使い、以下のコマンドを入力して実行します。
# ./mun_rakeup_game.sh debug
  コマンド実行後、ビルドログが表示されます。最終行に
Build success.
  の表記が4回成されれば成功です(ログがゆっくり流れますので、目視で確認できるかと思います)。

2. 更に Linux のターミナルから、以下のコマンドを実行することで、サーバが起動します。
# ./mun_rakeup_game.sh start
1. 頒布している MUN サーバパッケージの解凍先ディレクトリ内の mun_server/csharp ディレクトリにある
  appsettings.json をテキストエディタで開きます。

2. appsettings.json 内の 28 行目~ 30 行目付近に記述されている、
  "PUBLIC_IP_ADDRESS" 群内の
    ・ "PROXY_PUBLIC_ADDR"
    ・ "RESOLVER_PUBLIC_ADDR"
    ・ "ROOM_PUBLIC_ADDR"
  の3項目について、value の代入値を、ご使用している MacPC の IPアドレスに合わせて変更します。
    ※ 以下は、MacPC の IP アドレスが 192.168.1.253 の場合の設定です。
1. MacPC のターミナルで、MUN サーバパッケージの解凍先ディレクトリ内の mun_server/csharp ディレクトリを開き、
  その中の mun_rakeup_game.sh を使い、以下のコマンドを入力して実行します。
# ./mun_rakeup_game.sh debug
  コマンド実行後、ビルドログが表示されます。最終行に
Build success.
  の表記が4回成されれば成功です(ログがゆっくり流れますので、目視で確認できるかと思います)。

2. 更に MacPC のターミナルから、以下のコマンドを実行することで、サーバが起動します。
# ./mun_rakeup_game.sh start


複数クライアント動作のための準備

バックグラウンドでの動作を有効にする

  Unity のバージョンによっては「バックグラウンドでの動作」が無効になっている場合があり、
  その状態で複数クライアントを動かすと支障が出ます。
  実行バイナリを生成する前に、まずはその確認と、無効になっていた場合に有効にする手続きを行いましょう。

  Unity のメニューから Edit > Project Settings > Player を選択します。
  PlayerSettings の「Resolution and Presentation」内にある、「Run In Background」のチェックボックスが ON になっているか確認してください。
  もし、OFFになっていた場合には、チェックボックスを ON にします。


MUN クライアントをオンプレミス版 MUN サーバに接続させる

MonobitServerSettings.asset の設定で、接続先を「Self Server」に切り替える

  重ねて説明しますが、今回は MUN クライアントを「MUN テストサーバ」に接続した場合には動作しません。
  「オンプレミス版 MUN サーバ」に接続しなければなりませんので、設定ファイルを変更する必要があります。

  Unity Editor の Project ビューから、 Assets/Monobit Unity Networking/Resources ディレクトリを開き、
  その中の MonobitServerSettings.asset を選択します。
  MonobitServerSettings.asset の Inspector にて、まず「Server Settings」 > 「Host Type」について、「Self Server」に変更します。

  変更すると、「Server Settings」の項目内に「IP Address」および「Port」の項目が表示されますので、
  「IP Address」には、サーバを設置しているマシンのIPアドレスを、「Port」には、mun_resolver の待ち受けポート番号を設定します。

     ※ mun_resolver の待ち受けポート番号は、mun_server/csharp/appsettings.json のテキストファイル内の
       37行目付近にある"RESOLVER_LISTENING_CLIENT_TCP_PORT_BASE" に指定されています。
       (現リリース段階では、デフォルト設定として 9005 が指定されています。)

     ※ 以下の画像は、サーバの設置しているマシンのIPアドレスが 192.168.1.253 の場合の例です。


アプリケーションの作成

実行バイナリを生成する

  では、改めて実行バイナリを生成しましょう。
  Unity Editor のメニューから File > Build Settings... を選んでください。
  Build Settings ウィンドウ内の Scenes In Build に対し、
  Assets/Monobit Unity Networking/Samples/Scenes/RakeupGame/ServerSide/RakeupGame.unity を追加します。
  (上記ファイル Scenes In Build 内にドラッグ&ドロップしてください。)
  Build Settings ウィンドウ内の右下にある [ Build ] のボタンを押します。
  ここでビルドしますが、ビルド方法が Unity2018.2 以前と Unity2018.3 以降で異なりますので、
  お使いの Unity のバージョンに合わせて、以下のいずれかを選択してビルドしてください。

  ファイル名を RakeupGame_ServerSide.exe として保存します。
  しばらく待つと、新規ファイル RakeupGame_ServerSide.exe が出来上がります。



  まず「新しいフォルダー」をクリックし、新規フォルダを作成します。
  新規に作成したフォルダーに名前を付けます。ここでは「RakeupGame_ServerSide」としましょう。
  フォルダに「RakeupGame_ServerSide」が選択された状態で、[フォルダーの選択] ボタンを押下します。
  ボタンを押すとビルドが開始され、さらにしばらく待つと、先ほど作成した RakeupGame_ServerSide フォルダ内に「MUN_TEST.exe」が作成されます。


複数クライアントで動作させてみる

実行バイナリとUnityエディタの両方を使って、マルチプレイ動作確認を行なう

  実行バイナリをダブルクリックすると、以下の画面が出現します。
  お使いのディスプレイ解像度よりも低いスクリーンサイズで、かつウィンドウモードを有効にした状態で、[ Play! ]ボタンを押してください。
  一方で、Unityエディタ上の実行ボタンも押します。
  すると、実行バイナリ、Unityエディタのクライアント双方で、以下のような画面に切り替わります。
  各々のクライアントについて、プレイヤー名を入力し、「Connect Server」ボタンを押してください。
  続けて以下の画面に切り替わります。
  実行バイナリ、Unity エディタのいずれか一方のクライアントで、ルーム名を入力し、「Create Room」ボタンを押して、ルームを作成します。
  ルームを作成すると、以下のような表示がなされます。
     ・ My Player Name : 自身のプレイヤー名
     ・ Entry Room : 現在入室しているルーム名、および、(現在のルーム人数 / ルーム収容最大人数)
     ・ Host Player : そのルームのホストプレイヤー名
     ・ Room Status : ロビーからルームを可視状態にしているかどうか(Visible or Invisible)、および、ルーム入室を許可しているかどうか(Open or Close)
     ・ Rest Time To Game Start : ゲーム開始までの待ち時間
  この状態で、「Rest Time To Game Start」がゼロになるまでの間に、もう一方のクライアントの入室を済ませてください。
  もう一方のクライアントでは、以下の画面になっています。
  Created Room List の項目下に、「一方のクライアントが作成したルーム名」のボタンが現れますので、このボタンを押してみます。

  画面に表示される 「Rest Time To Game Start」 がゼロになったところで、自動的にゲームがスタートします。
  カーソルキーで、自分の操作キャラクタ(SDユニティちゃん)を動かすことができます。
  またこの操作に伴い、一定時間ごとにフィールド上に出現する「パネルアイテム」を取得することで点数が入ります。

  「収集したアイテムの数×100」をスコアとして、プレイ中にプレイヤーの頭上に表示させます。

  また、ゲーム終了までの制限時間が、画面左部の「Game Info」 内の 「Rest Frame」として表示されます。

  「Rest Frame」が 0 になった時点でゲームが終了し、画面左側に「Game Result」が表示されます。
    ※ 各プレイヤーごとに「プレイヤーID, 名前, 取得したスコアの順」で登録

  なお、サンプルの表示自体は「ルームに入室した逆順」で表示させていますので、下記のような表示になってしまいますが、
  表示前に取得したスコア値でソートすれば、ランキング上位順で表示させることも可能です。