Network Runner
- 概要
- 使用方法
- ランナーサポートコンポーネント
- プレイヤー / PlayerRef 構造体
- ネットワーク接続
- ティック管理
- ネットワークオブジェクトの管理
- シーン管理
- Scene Management
- 物理シーン
- インタレスト管理
- イベント関数
概要
NetworkRunner
はFusionの中心的なUnityコンポーネントで、1つのネットワーク化されたPeerを表します。メッセージング、マッチメイキング、接続、スポーン、シミュレーション、ステートのレプリケーションは全てこのコンポーネントが行います。1つのUnityインスタンスで複数のNetwork Runnerインスタンスを実行することができ、それぞれのNetwork Runner GameObjectインスタンスが個々のピアを表します。Multi-Peerを参照してください。
使用方法
作成
この Network Runner GameObject には以下の3つの作成方法があります。
- 実行時にインスタンス化されたプレハブとして作成
- シーンオブジェクトとしてロードして作成
- 実行時にGameObjectに
NetworkRunner
コンポーネントを追加して動的に作成
起動と接続
一度作成されると、ネットワークランナーのインスタンスはマッチメイキングに接続したり、ルームを作成/参加することができます。
Game Loopをご覧ください。
ルームの作成と参加
NetworkRunner
インスタンスから StartGame()
を呼び出すと、Peer が生成され、 StartGameArgs
引数で指定されたルームに参加または作成します。ただし、シングルプレイヤーモードでは、Photonサーバーへの接続は行われず、ルームも作成されません。
Multi-Peer Modeでは、すべてのシーンオブジェクトとスポーンオブジェクトは専用のGameObjectの子になり、そのRunnerに関連付けられたPhysicsScene/PhysicsScene2Dに追加されます。
IMPORTANT: NetworkRunner
は一度しか使用できません。NetworkRunnerがゲームセッションから切断されるか、接続に失敗したら、破棄し、新しいゲームセッションを開始するために、新しいNetworkRunnerインスタンスを作成する必要があります。
ランナーサポートコンポーネント
起動時に、NetworkRunner
コンポーネントはすべての子コンポーネント SimulationBehaviour
を見つけて登録します。これらのコンポーネントは FixedUpdateNetwork()
と Render()
のコールバックを受け取ります。
また、NetworkRunner
はゲームオブジェクトの Components にある全ての子コンポーネント INetworkRunnerCallbacks
インターフェイスを見つけ、コールバック用に登録します。
組み込みの Fusion Runner コンポーネント
Network Runnerゲームオブジェクトには、Runnerの機能を拡張するFusionコンポーネントが多数あります。
HitboxManager
- ランタイム時に自動的に追加され、ヒットボックスとヒットボックスの履歴を管理します。遅延補償を参照してください。RunnerLagCompensationGizmos
- これを追加するとLag Compensation ギズモが有効になります。RunnerAOIGizmos
-このコンポーネントを追加するとArea Of Interest ギズモが有効になります。Interest Management - Area Of Interestを参照してください。RunnerEnableVisibility
- 追加されると、マルチピアモードでランナーのVisibilityが有効になり、全てのシーンとスポーンされたGameObjectがVisibilityハンドリングのために登録されます。Runner Visibility Controls ウィンドウが動作するために必要です。Multi-PeerとFusionRunnerVisibilityControlWindowを参照してください。
カスタムSimulationBehavioursランナーコンポーネント
SimulationBehaviour
の派生クラス、またはINetworkRunnerCallbacks
を実装したコンポーネント(または両方を同じComponentに含む)をNetwork Runnerゲームオブジェクトに追加することで、独自のRunner固有のサポートコンポーネントを作成することができます。
これらのコンポーネントは、NetworkRunner.StartGame()
が呼び出されると、自動的に NetworkRunner
インスタンスによって検出され、該当する場合に関連するコールバックが呼び出されます。
カスタム INetworkRunnerCallbacks
起動時に、NetworkRunner
コンポーネントはすべての子コンポーネントを INetworkRunnerCallbacks
に登録します。INetworkRunnerCallbacks API Reference](https://doc-api.photonengine.com/en/fusion/v2/index.html)を参照してください。
注意: 実行順序により、一部のコールバックは適用されず、呼び出されない場合があります。たとえば、OnPlayerJoined()は、以前に参加したプレーヤやランナー自身のプレーヤでは呼び出されません(これらのコールバックが登録される頃には、すでに参加しているため)。

プレイヤー / PlayerRef 構造体
Dedicated ServerまたはShared Mode Game Serverを除き、すべてのピアは入力を行う人間のプレイヤーを表していると仮定されます。そのため、各 NetworkRunner
は関連する PlayerRef
構造体の値があります。
ローカルの PlayerRef
の値は Runner.LocalPlayer
によって返されます。Playerが存在しない場合(Dedicated ServerまたはShared Mode Game Server)はPlayerRef.None
となります。
PlayerRef
はどのPeerがネットワークオブジェクトの入力と状態の権限を持っているかを示し、Remote Procedure Callsでピアをターゲットするために使用されます。
ネットワーク接続
ピアへの接続とトランスポートの処理は NetworkRunner
によってラップされます。これはマッチメイキングサーバー、ルームサーバー、ゲームサーバーへの接続を処理します。
マッチメイキング
Matchmakingを参照してください。
ティック管理
NetworkRunnerは、Tickのシミュレーションと再シミュレーションのタイミングを決定します。Unity Update 毎に、NetworkRunner は、前回のティックシミュレーションからの経過時間に基づいて、何ティックのシミュレーショ ンが必要かを決定します。
さらに、Room 内のクライアントはサーバーから継続的にテレメトリーを受信し、サーバーよりどの程度先にティックを刻むべきかを調整します。送信されたティックの更新が、サーバーが必要とする前に届くように、クライアントは必要に応じてティックレートを上げたり下げたりします。
ティックがシミュレートされると、Fusionは全てのFixedUpdateNetwork()
コールバックと、シミュレーションに関連する他の多くのイベントコールバックを呼び出します。
ネットワークオブジェクトの管理
ネットワークランナーは、ネットワークオブジェクトのライフサイクル、レプリケーション、シーン管理、すべてのネットワークとネットワークオブジェクト関連のコールバックを管理します。
シーン管理
Network Object Spawningを参照してください。
Scene Management
Scene Managementを参照してください。
物理シーン
Multi-Peer Mode では、各ランナーは関連するUnityの PhysicsScene
や PhysicsScene2D
を持っています。これらのシーンを取得するには、それぞれ Runner.GetPhysicsScene()
と Runner.GetPhysicsScene2D()
を使用します。
インタレスト管理
インタレスト管理を参照してください。
イベント関数
すべての NetworkBehaviour イベントとタイミングセグメントは NetworkRunner
コンポーネントから発生します。Network Behaviour イベント機能 と コールバックインターフェイス を参照してください。
SimulationBehaviour
バーチャルイベントコールバックメソッド:
- FixedUpdateNetwork()
- Render()
NetworkBehaviour
は、上記の SimulationBehaviour
コールバックメソッドに加えて、以下のバーチャルイベントコールバックメソッドを公開しています。
- Spawned()
- Despawned()
Spawned() Despawned() などのインタフェースを使用して、NetworkRunner
イベントコールバックを追加できます。
- IAfterSpawned
- IBeforeAllTicks
- IAfterAllTicks
- IBeforeTick
- IAfterTick
- IPlayerJoined
- IPlayerLeft
イベントコールバックを網羅したリストについてはNetwork Behaviour Callback Interfacesを参照してください。