RakeupGame サンプル (ClientSide)
目次
概要
複数クライアント動作のための準備
アプリケーションの作成
複数クライアントで動作させてみる
「サーバサイドプログラム」の比較対象として、旧来の「MUN クライアントサイドのみ」で動作することを
想定して作成した場合の、簡易ゲームサンプルの完成版です。
本サンプルは、MUN 2.0 以降公開された MUN サーバを用いて「サーバサイドプログラミング」 を行なうにあたり、
「サーバの実装内容を変化させず、MUN クライアントのみで実装する場合」の簡易ゲームサンプルの完成版です。
このサンプルはフィールド上に置かれたアイテムに、自分のプレイヤーキャラを近づけることで収集し、
制限時間内において、どれだけのアイテムを収集できたかを競うゲームです。
なお、サーバサイドプログラミングの実装に伴う RakeupGame(ServerSide) サンプルとの比較として作成されたものであり、
このサンプル自体は、旧来の MUN 1.x でも作成することは可能です。
複数クライアント動作のための準備▲
バックグラウンドでの動作を有効にする
Unity のバージョンによっては「バックグラウンドでの動作」が無効になっている場合があり、
その状態で複数クライアントを動かすと支障が出ます。
実行バイナリを生成する前に、まずはその確認と、無効になっていた場合に有効にする手続きを行いましょう。
Unity のメニューから Edit > Project Settings > Player を選択します。


PlayerSettings の「Resolution and Presentation」内にある、「Run In Background」のチェックボックスが
ON になっているか確認してください。
もし、OFFになっていた場合には、チェックボックスを ON にします。

アプリケーションの作成▲
実行バイナリを生成する
では改めて実行バイナリを生成しましょう。
Unity のメニューから File > Build Settings... を選んでください。

Build Settings ウィンドウ内の Scenes In Build に対し、
Assets/Monobit Unity Networking/Samples/Scenes/RakeupGame/ClientSide/RakeupGame.unity
を追加します。
(上記ファイル Scenes In Build 内にドラッグ&ドロップしてください。)

Build Settings ウィンドウ内の右下にある [ Build ] のボタンを押します。

ここでビルドしますが、ビルド方法が Unity2018.2 以前と Unity2018.3 以降で異なりますので、
お使いの Unity のバージョンに合わせて、以下のいずれかを選択してビルドしてください。
複数クライアントで動作させてみる▲
実行バイナリとUnityエディタの両方を使って、マルチプレイ動作確認を行なう
実行バイナリをダブルクリックすると、以下の画面が出現します。
お使いのディスプレイ解像度よりも低いスクリーンサイズで、かつウィンドウモードを有効にした状態で、[ Play! ]ボタンを押してください。

一方で、Unityエディタ上の実行ボタンも押します。

すると、実行バイナリ、Unityエディタのクライアント双方で、以下のような画面に切り替わります。
各々のクライアントについて、プレイヤー名を入力し、「Connect Server」ボタンを押してください。

続けて以下の画面に切り替わります。
実行バイナリ、Unity エディタのいずれか一方のクライアントで、ルーム名を入力し、「Create Room」ボタンを押して、ルームを作成します。

ルームを作成すると、以下のような表示がなされます。
・ My Player Name : 自身のプレイヤー名
・ Entry Room : 現在入室しているルーム名、および、(現在のルーム人数 / ルーム収容最大人数)
・ Host Player : そのルームのホストプレイヤー名
・ Room Status : ロビーからルームを可視状態にしているかどうか(Visible or Invisible)、および、ルーム入室を許可しているかどうか(Open
or Close)
この状態で「ルーム作成側のクライアント」は待ちます。

もう一方のクライアントでは、以下の画面になっています。
Created Room List の項目下に、「一方のクライアントが作成したルーム名」のボタンが現れますので、このボタンを押してみます。

一方のクライアントでルーム作成し、もう一方のクライアントでそのルームに入室した状態が以下の画面です。
・ 自身のプレイヤー ID, ルーム名, 現在のルームの人数, ルーム入室の許可/拒否設定が表示されます。
・ Leave Room ボタンで、ルームから退室することが出来ます。
・ (ホストのみ) Start Game ボタンでゲームを開始することが出来ます。
表示確認を終えたところで、いずれか一方のクライアント(必ずしもホストでなくともよい)にて、Start Game ボタンを押してみましょう。

Game Start ボタンを押すと、ゲームがスタートします。
カーソルキーで、自分の操作キャラクタ(SDユニティちゃん)を動かすことができます。
またこの操作に伴い、一定時間ごとにフィールド上に出現する「パネルアイテム」を取得することで点数が入ります。
「収集したアイテムの数×100」をスコアとして、プレイ中にプレイヤーの頭上に表示させます。
また、ゲーム終了までの制限時間が、画面左部の「Game Info」 内の 「Rest Frame」として表示されます。

「Rest Frame」が 0 になった時点でゲームが終了し、画面左側に「Game Result」が表示されます。
※ 各プレイヤーごとに「プレイヤーID, 名前, 取得したスコアの順」で登録
なお、サンプルの表示自体は「ルームに入室した逆順」で表示させていますので、下記のような表示になってしまいますが、
表示前に取得したスコア値でソートすれば、ランキング上位順で表示させることも可能です。
