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 のバージョンに合わせて、以下のいずれかを選択してビルドしてください。

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



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


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

実行バイナリと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)も同期しています。)