This document is about: FUSION 2
SWITCH TO

Network Runner

概要

NetworkRunnerはFusionの主要なコンポーネントで、一つのネットワーク上のピアを表します。メッセージング、マッチメイキング、ネットワークへの接続、オブジェクトのスポーン、シミュレーション、状態のレプリケーションは、全てこのコンポーネントによって管理されます。

一つのUnityのインスタンス上で複数のNetworkRunnerを実行することも可能で、その場合は各NetworkRunnerが個別のピアになります。マルチピアモードを参照してください。

使用方法

作成

NetworkRunnerのゲームオブジェクトの作成方法は、以下の三つです。

  • 実行時にプレハブからインスタンス化する
  • シーンオブジェクトとしてロードする
  • 実行時に動的に作成する(ゲームオブジェクトにNetworkRunnerコンポーネントを追加する)

起動と接続

NetworkRunnerを作成すると、マッチメイキングを行ったり、特定のルームの作成と参加が可能になります。

ルームの作成と参加

NetworkRunnerStartGame()を呼び出すと、ピアが作成されて、StartGameArgs引数で指定したルームの作成または参加を行います。ただし、シングルプレイヤーモードでは、サーバー接続やルーム作成は行われません。

マルチピアモードでは、全てのネットワークオブジェクトは各NetworkRunner配下として作成され、そのNetworkRunnerに関連付けられたPhysicsScenePhysicsScene2Dに追加されます。

重要: 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()は既に(自身が参加する以前に)参加しているプレイヤーに対しては呼び出されません。

NetworkRunner in the Hierarchy of Core Objects
NetworkRunnerは、接続・マッチメイキング・メッセージング・イベントコールバック・スナップショット履歴・ネットワークオブジェクトの同期のすべてを管理します。

プレイヤー / PlayerRef構造体

専用サーバーや共有モードのゲームサーバーを除き、全てのピアは入力を行う人間のプレイヤーを表すとされているため、各NetworkRunnerにはPlayerRef構造体が関連付けられています。

ローカルのPlayerRefRunner.LocalPlayerで取得できます。プレイヤーが存在しない場合(専用サーバーや共有モードのゲームサーバー)は、値がPlayerRef.Noneになります。

PlayerRefは、どのピアがネットワークオブジェクトの入力権限や状態権限を持っているかを示したり、RPCの対象となるピアを指定したりするために使用されます。

ネットワーク接続

ピアの接続(マッチメイキングサーバー、ルームサーバー、ゲームサーバー)とトランスポートの処理はNetworkRunnerでラップされています。

ティックの管理

NetworkRunnerはティックベースシミュレーションと再シミュレーションを実行する責務を持ちます。UnityのUpdateごとに、NetworkRunnerは前回のシミュレーションからの経過時間に基づいて、何ティックのシミュレーションを進める必要があるかを決定します。

さらにルーム内のクライアントは、サーバーから継続的にテレメトリーを受信し、サーバーよりどの程度ティックを先に進めるべきかを調整します。送信するデータがサーバーに必要とされる前に届くことを保証するため、クライアントは必要に応じてティックレートを上下させます。

あるティックのシミュレーションを実行する時、Fusionは全てのFixedUpdateNetwork()コールバックと、シミュレーションに関連する様々なイベントコールバックを呼び出します。

Back to top