Network Runner
概要
NetworkRunnerはFusionの主要なコンポーネントで、一つのネットワーク上のピアを表します。メッセージング、マッチメイキング、ネットワークへの接続、オブジェクトのスポーン、シミュレーション、状態のレプリケーションは、全てこのコンポーネントによって管理されます。
一つのUnityのインスタンス上で複数のNetworkRunnerを実行することも可能で、その場合は各NetworkRunnerが個別のピアになります。マルチピアモードを参照してください。
使用方法
作成
NetworkRunnerのゲームオブジェクトの作成方法は、以下の三つです。
- 実行時にプレハブからインスタンス化する
- シーンオブジェクトとしてロードする
- 実行時に動的に作成する(ゲームオブジェクトにNetworkRunnerコンポーネントを追加する)
起動と接続
NetworkRunnerを作成すると、マッチメイキングを行ったり、特定のルームの作成と参加が可能になります。
ルームの作成と参加
NetworkRunnerのStartGame()を呼び出すと、ピアが作成されて、StartGameArgs引数で指定したルームの作成または参加を行います。ただし、シングルプレイヤーモードでは、サーバー接続やルーム作成は行われません。
マルチピアモードでは、全てのネットワークオブジェクトは各NetworkRunner配下として作成され、そのNetworkRunnerに関連付けられたPhysicsSceneかPhysicsScene2Dに追加されます。
重要: NetworkRunnerは再利用できません。一度セッションから切断するか、接続に失敗したら、そのNetworkRunnerは破棄してください。新しいセッションを開始する場合は、新しいNetworkRunnerインスタンスを作成してください。
関連コンポーネント
NetworkRunnerは起動時に、子オブジェクトの全てのSimulationBehaviourコンポーネントを検出して登録します。登録されたコンポーネントは、FixedUpdateNetwork()とRender()コールバックを受け取れるようになります。
また、NetworkRunnerは子オブジェクトの全てのINetworkRunnerCallbacksインターフェースを実装しているコンポーネントを検出して登録し、各コールバックを受け取れるようにします。
Fusionの組み込みコンポーネント
NetworkRunnerのゲームオブジェクトに追加してNetworkRunnerの機能を拡張するコンポーネントがいくつか存在します。
- RunnerAOIGizmos:これを追加すると、関心領域ギズモが有効になります。
- HitboxManager:実行時に自動的に追加され、ヒットボックスとその履歴を管理します。ラグ補償を参照してください。
- RunnerLagCompensationGizmos:これを追加すると、ラグ補償ギズモが有効になります。
- RunnerAOIGizmos:これを追加すると、関心領域ギズモが有効になります。
- RunnerEnableVisibility:これを追加すると、マルチピアモードでRunner Visibilityが有効になり、全てのネットワークオブジェクトが可視性の操作のために登録されます。可視性の操作はRunner Visiblity Controlsウインドウで行います。マルチピアモードを参照してください。
SimulationBehaviour
SimulationBehaviourを継承するかINetworkRunnerCallbacksを実装した(または両方を満たした)コンポーネントをNetworkRunnerのゲームオブジェクトに追加すると、独自にNetworkRunner用のコンポーネントを作成することができます。
これらのコンポーネントはNetworkRunner.StartGame()呼び出し時に自動的にNetworkRunnerによって検出され、関連するコールバックが呼び出されるようになります。
INetworkRunnerCallbacks
NetworkRunnerは起動時に、子オブジェクトの全てのINetworkRunnerCallbacksを実装しているコンポーネントを検出して登録します。INetworkRunnerCallbacks API Referenceを参照してください。
注意: 実行順序によって、一部のコールバックが呼び出されない可能性があります。例えば、OnPlayerJoined()は既に(自身が参加する以前に)参加しているプレイヤーに対しては呼び出されません。
 
    プレイヤー / PlayerRef構造体
専用サーバーや共有モードのゲームサーバーを除き、全てのピアは入力を行う人間のプレイヤーを表すとされているため、各NetworkRunnerにはPlayerRef構造体が関連付けられています。
ローカルのPlayerRefはRunner.LocalPlayerで取得できます。プレイヤーが存在しない場合(専用サーバーや共有モードのゲームサーバー)は、値がPlayerRef.Noneになります。
PlayerRefは、どのピアがネットワークオブジェクトの入力権限や状態権限を持っているかを示したり、RPCの対象となるピアを指定したりするために使用されます。
ネットワーク接続
ピアの接続(マッチメイキングサーバー、ルームサーバー、ゲームサーバー)とトランスポートの処理はNetworkRunnerでラップされています。
ティックの管理
NetworkRunnerはティックベースシミュレーションと再シミュレーションを実行する責務を持ちます。UnityのUpdateごとに、NetworkRunnerは前回のシミュレーションからの経過時間に基づいて、何ティックのシミュレーションを進める必要があるかを決定します。
さらにルーム内のクライアントは、サーバーから継続的にテレメトリーを受信し、サーバーよりどの程度ティックを先に進めるべきかを調整します。送信するデータがサーバーに必要とされる前に届くことを保証するため、クライアントは必要に応じてティックレートを上下させます。
あるティックのシミュレーションを実行する時、Fusionは全てのFixedUpdateNetwork()コールバックと、シミュレーションに関連する様々なイベントコールバックを呼び出します。