PUN Classic (also called PUN1) is the original and first major version of PUN. It is now replaced by PUN2 which is refactored and enhanced. We highly recommend starting new projects with PUN2 and if possible migrating existing ones from PUN1 to PUN2 by following our "Migration Notes". PUN Classic will be maintained for the coming months. We will fix important bugs and support new Unity versions but new features will be added only to PUN2.

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に設定してください。 この境界は、デモのマップと一致しなければなりません。

Screenshot of the transform component
トランスフォームコンポーネントは上記のように設定してください

注意:Unity 4を使用する場合、Gizmosを有効化してゲームビューを参照するとグリッドが移動されている場合があります。 ‘Free Aspect’を使用すれば、ゲームビュー内の固定されたアスペクト比を使用せずに若干の修正をおこなうことができます。

CullAreaコンポーネントに含まれる、その他のオプションをみていきましょう。

従来は大きな領域が1つあるのみで、ネットワークカリング機能は全くありませんでした。 このため、次のステップではマップ上に任意の数の下位区分を定義します。 RPGMovementデモでは、下位区分の数2に設定します。 この値を変更すると、さらに多くのオプションが表示されたり、場合によっては非表示になることが分かります。 この新たなオプションによって、それぞれの下位区分に設定する行と列の数を定義できます。 このチュートリアルでは最初の下位区分の 行数列数を、ともに3に設定します。 シーンビューを参照すると、赤い正方形がさらに小さな9つの緑の正方形に細分化されています。 2番目の下位区分の行数列数も設定してみましょう。 今回は、これらの値をともに2に設定します。 シーンビューを再度参照すると、緑の正方形がさらに、小さな4つの青い正方形に分割されています。

Screenshot of the cull area component
カリング領域コンポーネントは上記のように設定してください

備考:下位区分の最大数は3に制限されています。 上記の値を設定することで作成されるセルの最大数は、デフォルト値によって249までと制限されています。 これよりも多くのセルを作成しようとすると、エディターのコンソールに例外が表示されます。

最後の2つのオプションは、シーンとゲームビューの調整です。 トグルボタンを automatically align the editor view with the gridにすると、カリング領域のサイズや位置をアップデートするたびに、シーンビューが変更されます。 これはカリング領域の境界を、作成したレベルに合致させようとする際に役立ちます。 Align main camera with gridは、おもに横スクロールやトップダウンのゲームのテストに使用され、メインカメラをグリッドに合わせて整列します。 これによって、テスト用にメインカメラを手動で調整する必要がなくなるため作業負荷が減ります。 メインカメラの調整の実行は、取り消し可能です。

Screenshot of the grid
セットアップが正常に完了すると、エディタービューは以下のようになります

プレイヤーをセットアップ

ワールドの設定が完了したので、次にプレイヤーをセットアップします。 Photon Unity Networking > Demos > DemoRPGMovement > Resourcesへと進み、プレハブRobot Kyle RPGを選択します。 インスペクターを参照し、Add ComponentをクリックしてリストからNetwork Culling Handlerを選択します。 このコンポーネントは、さきほど調整したCull Areaへのリファレンスを自動的に検索します。また、クライアントがどのインタレストグループに登録すべきか、または登録解除すべきかを定期的に確認します。 これ以上はなにも設定する必要がなく、プレイヤーと全般のセットアップが完了しました。

Back To Top

テスト

ネットワークカリングの設定が完了し、テストを実施できるようになりました。 テストには、同じルームに接続したクライアントが少なくとも2つ必要です。 UnityでFile > Build & Runと進んでください。 Unityはスタンドアロンのクライアントを作成し、このクライアントは処理完了時に自動的に起動します。 テストをおこなうには、作成した実行ファイルを複数回起動するか、またはエディタのプレイボタンを押します。 2つ以上のクライアントがローディングされて同じルームに接続し、プレイヤーキャラクターが作成された制御可能になったら、 そのうちの1つを動かし始めて、他の1つのクライアントのウィンドウで動きを追ってみましょう。 プレイヤー間の距離が広がるにつれて、動きにラグが多くなることがわかります。 これは、ネットワーク上で送信されるアップデートの数が大幅に減少するためです。 反対に、2人のプレイヤーの距離を縮めると動きがより正確になり、ラグも軽減します。これは、より多くのアップデートが送信されるためです。

このページでは、ネットワークカリングの可能性を示しているだけだという点に留意してください。 本番環境でネットワークカリングを使用する場合には、デフォルトの基本機能を拡張して改善する必要があります。

To Document Top