Cullingデモ
このチュートリアルでは、PUNパッケージに含まれる RPGMovementデモ にネットワークカリングを追加する方法を記載します。
まず、ネットワークカリングとはなにか、またネットワークカリングを利用する理由を説明します。
シーン内に2人のアクティブなプレイヤーがいるとします:1人のプレイヤーはマップ上の左上角、もう1人のプレイヤーはマップ上の右下角にいます。
このため、これらのプレイヤー間の距離はほぼ最大値に達しています。
また、これらのプレイヤー同士はお互いを見ることができません。これは、マップ上に障害物が設置されているためです。
第1プレイヤーは第2プレイヤーがなにをしているか把握する必要はなく、その逆もまた同様です。
ここで必要になるのがネットワークカリングです。
ネットワークカリングによってインテレストグループが使用され、ネットワーク上で送信されるメッセージ量が減少します。
このソリューションを使用すると、プレイヤーは現在インタレストをもっている複数のグループに登録され、これらのグループに対してのみメッセージが送信されるか、またはこれらのグループからのみメッセージを受信します。
はじめに
Unityを起動後、最初にすべきことはUnity Asset Storeから最新のPUNパッケージをダウンロードし、ファイルをインポートすることです。
RPGMovementデモ以外のすべてのデモを解除すると、このデモに安全にネットワークカリング機能を追加できます。
インポート処理が完了したら、Photon Unity Networking > Demos > DemoRPGMovementへと進み、このフォルダ内のシーンを開いてください。
階層を参照し、水色のRobot Kyle RPGを検索します。
これが存在する場合には、削除する必要があります。削除しないと、後に多くの例外が発生することになります。
次に、ネットワークカリングで使用するグリッドを設定します。
ここで再び階層を確認し、ゲームオブジェクトTerrainを検索します。
このオブジェクト上で右クリックし、「create empty」を選択します。
これによって、Terrainの子として新規の空のオブジェクトが作成されます。
このオブジェクトを任意の名前にリネームします。このチュートリアルではCullAreaとします。
CullAreaゲームオブジェクトを選択し、インスペクター内のAdd Componentボタンをクリックします。Cull Areaを検索して、そのゲームオブジェクトに追加します。
このスクリプトは、ゲームオブジェクトのインスペクターにドラッグアンドドロップできます。
これは Photon Unity Networking > UtilityScriptsにあります。
このコンポーネントが提供するオプションの詳細を説明します。
ワールドをセットアップ
まず、コンポーネントではプロジェクトのゲームタイプを選択します。
さらに詳しく説明すると、これはカリング領域の垂直軸を設定します。
横スクロールをおこなうゲームの場合には Side Scroller Mode
を選択します。トップダウンまたは完全に3D視点(ファーストパーソン、サードパーソンなど)のゲームの場合にはTop Down Or 3D Mode
を選択してください。
このデモではRPGMovementデモの作業をおこないますので、Top Down Or 3D Modeオプションを選択します。
次に、カリング領域の次元のセットアップをおこないます。
ゲームオブジェクトのスケーリングを拡張し、Transformコンポーネントを変更します。RPGMovementデモでは、x-軸と z-軸を100に設定する必要があります。
シーンウィンドウを参照すると、カリング領域の境界でを示す赤い正方形があることがわかります。
また、この正方形が移動されたことがわかります。このため、Transformコンポーネントのx-座標とz-座標を変更して位置を調整する必要があります。
これらの値を50に設定してください。
この境界は、デモのマップと一致しなければなりません。
CullAreaコンポーネントに含まれる、その他のオプションをみていきましょう。
従来は大きな領域が1つあるのみで、ネットワークカリング機能は全くありませんでした。
このため、次のステップではマップ上に任意の数の下位区分を定義します。
RPGMovementデモでは、下位区分の数を2に設定します。
この値を変更すると、さらに多くのオプションが表示されたり、場合によっては非表示になることが分かります。
この新たなオプションによって、それぞれの下位区分に設定する行と列の数を定義できます。
このチュートリアルでは最初の下位区分の 行数と列数を、ともに3に設定します。
シーンビューを参照すると、赤い正方形がさらに小さな9つの緑の正方形に細分化されています。
2番目の下位区分の行数と列数も設定してみましょう。
今回は、これらの値をともに2に設定します。
シーンビューを再度参照すると、緑の正方形がさらに、小さな4つの青い正方形に分割されています。
最後の2つのオプションは、シーンとゲームビューの調整です。
トグルボタンを automatically align the editor view with the gridにすると、カリング領域のサイズや位置をアップデートするたびに、シーンビューが変更されます。
これはカリング領域の境界を、作成したレベルに合致させようとする際に役立ちます。
Align main camera with gridは、おもに横スクロールやトップダウンのゲームのテストに使用され、メインカメラをグリッドに合わせて整列します。
これによって、テスト用にメインカメラを手動で調整する必要がなくなるため作業負荷が減ります。
メインカメラの調整の実行は、取り消し可能です。
プレイヤーをセットアップ
ワールドの設定が完了したので、次にプレイヤーをセットアップします。
Photon Unity Networking > Demos > DemoRPGMovement > Resourcesへと進み、プレハブRobot Kyle RPGを選択します。
インスペクターを参照し、Add ComponentをクリックしてリストからNetwork Culling Handlerを選択します。
このコンポーネントは、さきほど調整したCull Areaへのリファレンスを自動的に検索します。また、クライアントがどのインタレストグループに登録すべきか、または登録解除すべきかを定期的に確認します。
これ以上はなにも設定する必要がなく、プレイヤーと全般のセットアップが完了しました。
テスト
ネットワークカリングの設定が完了し、テストを実施できるようになりました。
テストには、同じルームに接続したクライアントが少なくとも2つ必要です。
UnityでFile > Build & Runと進んでください。
Unityはスタンドアロンのクライアントを作成し、このクライアントは処理完了時に自動的に起動します。
テストをおこなうには、作成した実行ファイルを複数回起動するか、またはエディタのプレイボタンを押します。
2つ以上のクライアントがローディングされて同じルームに接続し、プレイヤーキャラクターが作成された制御可能になったら、
そのうちの1つを動かし始めて、他の1つのクライアントのウィンドウで動きを追ってみましょう。
プレイヤー間の距離が広がるにつれて、動きにラグが多くなることがわかります。
これは、ネットワーク上で送信されるアップデートの数が大幅に減少するためです。
反対に、2人のプレイヤーの距離を縮めると動きがより正確になり、ラグも軽減します。これは、より多くのアップデートが送信されるためです。