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()
コールバックと、シミュレーションに関連する様々なイベントコールバックを呼び出します。