KeyValueSearchサンプル
目次
概要
ライトの輝度の調整
複数クライアント動作のための準備
アプリケーションの作成
複数クライアントで動作させてみる
「クエリー検索を用いたマッチング処理」のサンプルです。
本サンプルは、クエリー検索を用いた、ルームマッチング処理のサンプルです。
ライトの輝度の調整▲
Directional light for UnityChan の輝度を低くする
Unity5 以降のバージョンを使っている場合、本サンプルを動作させる場合、SDUnityChanの輝度が高くなってしまいます。
そのため、ライトの輝度を低くしましょう。
project ビューから Assets/Monobit Unity Networking/Samples/Scenes/KeyValueSearch/KeyValueSearch.unity
を
ダブルクリックして開きます。

hierarchy ビューから、「Directional light for UnityChan」を選択します。

Inspector にある Light の項目内の「Intensity」について、2 から 1 に変更してください。

複数クライアント動作のための準備▲
バックグラウンドでの動作を有効にする
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/KeyValueSearch/KeyValueSearch.unity
を追加します。
(他に登録されているシーンファイルがある場合、SceneInBuild 内のチェックボックスで外すか、SceneInBuild 内のリストから削除してください)

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

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

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

実行バイナリ、Unityエディタともに以下のような画面に切り替わります。

クエリー検索項目を設定し、ルームを作成する
一方のクライアント側でルームを作成します。
ルームを作成する場合、CreateRoom の Custom Parameters の設定を行ないます。
「New Key:」と書かれた項目の右隣にあるテキストボックス欄に、クエリー検索項目のキーを入力します。
今回は試しに「KEY01」と入力してみましょう。

入力したら、その入力欄の右隣にある Add ボタンをクリックします。

Add ボタンを押すと、キー名「KEY01」に対応した Value 入力のテキストボックスが現れます。
ここに クエリー検索キーに対する値を入力しましょう。

同様の手順でいくつかクエリー検索キーと、その値について設定していきましょう。

キーを設定したら Create Room ボタンを押します。

Create Room ボタンを押すと、以下の画面に切り替わります。
ルームホスト(作成側)には、作成したルーム情報として、以下の情報が表示されます。
・自身のルーム内プレイヤーID
・現在のルーム内プレイヤー人数/ルーム内プレイヤー収容人数の上限
・ルームの入室可否設定、およびロビー内プレイヤーへの情報通知設定
・ルームカスタムパラメータの情報
・ルームカスタムパラメータの編集ダイアログ

また、作成したルームに対する情報が、同一のロビーに入室しているプレイヤーにも拡散され、表示されます。

ルームホスト側で既存のルームカスタムパラメータの値を変更すると、同一のロビー、および同一のルームに入室しているプレイヤーに対して
変更された情報がリアルタイムに反映されます。

なお、ルーム入室後に新規に追加されたルームカスタムパラメータのキーおよび値は、ロビーに通知されません。
ルーム入室後に新規に追加されたルームカスタムパラメータは、ルーム内プレイヤーに対してのみ共有されます。

クエリー検索によるルーム入室を実行する
もう一方のクライアントでクエリー検索によるルーム入室を実行します。
試しに クエリー検索キーとして「KEY01>100」と入力してみてください。

この状態で JoinRoom ボタンを押してみます。

すると該当するルームが存在しないため、入室できません。
バイナリデータで動かしている場合、OnJoinRoomFailed() などでエラー手続きなどを行なっていないので、以下のように画面の変化はありません。
Unityエディタ上で動かしていた場合、コンソールログとしてエラーメッセージが表示されます。

今度はクエリー検索キーとして「KEY01>=100」と入力してみましょう。

この状態で JoinRoom ボタンを押してみます。

すると、先に作成したルームが検索条件に一致するため、入室することが可能です。
ルームホスト側でルーム入室後に新規作成したカスタムパラメータの情報がある場合、
ルーム入室することで初めて共有されることもわかります。

ルーム検索条件は複数設定することができます。
一旦ゲストとして入室した側から Leave Room ボタンを押して退室してみましょう。

退室して最初の画面に戻ったところで、クエリー検索キーとして「KEY01=100 AND KEY03="AAA"」と入力してみましょう。

この状態で JoinRoom ボタンを押してみます。

すると入室することができます。
クエリー検索キーは SQL構文における WHERE 句と同じような設定を行ないます。

ゲームをスタートする
ゲームをスタートするには「Start Game」ボタンを押します。

カーソルキーでSDユニティちゃんを動かすことができます。オブジェクトの位置・姿勢・アニメーション同期も取れています。
(スクリーンショットの都合で値が違っていますが、制限時間(Rest Frame)も同期しています。)
