このページは編集中です。更新が保留になっている可能性があります。

実行順序

概要

Fusionの実行ループは3つのメインループに分解することができます。

  1. Resimulation Loop(リシミュレーションループ);
  2. Forward Loop(フォワードループ);
  3. Render Loop(レンダリングループ)

以下のセクションでは、3つのループと、そこで呼び出されるスクリプトとコールバックの順序について説明します。

  • INT: INTのマークがついたコールバックは、Fusionの内部で使用するもので、搭載されているだけのものです。
  • CB: CBのマークがついたコールバックは、ユーザーが使用することができ、NetworkBehaviourSimulationBehaviourから継承するスクリプトに関連インターフェースを実装することでフックさせることができます。

トップに戻る

グラフィック全体をダウンロードする

実行順序グラフィック全体は、こちらでダウンロードいただけます。

トップに戻る

Fusionの初期化

Fusionの初回起動時、NetworkRunnerがRunnerとして同様のオブジェクトでINetworkRunnerCallbacksを実装しながら全てのコンポーネントを検索します。Awake()で検出されるものが何もない場合は、Fusion Update Loopの間にもう一度試行されるか、稀ですが、Shutdown Handling中にランナーが即座に破壊され、終了します。

スクリプトが実装するのはINetworkRunnerCallbacksで、NetworkRunnerと同様のオブジェクトや階層レベルにはロケートしません。これらは、後の段階でNetworkRunner.AddCallbacks()を呼び出し、NetworkRunnerを使用して登録する必要があります。Runnerが問題なく初期化された後にこれを行います。

NetworkRunner Initialization
NetworkRunnerの初期化

トップに戻る

Fusion Update Loop(アップデートループ)

Fusionシミュレーションのコアを司るのは、ResimulationループとForwardループです。これらを実行する前に以下の手順を行います。

  1. Unity自体の FixedUpdate() メソッドが実行されている
  2. PhysicsMode.Noneが選択された場合、ローカルのPhysicsシミュレーションが実行している

Before Fusion Update Loop
Fusion Updateループの前

これらの手順の後で、Fusion Updateループが開始されます。Fusion Updateループは以下の実行手順で構成されています。:

  1. NetworkRunnerで登録されたコールバックが実行される。
  2. NetworkObjectスポーンキューが処理される。これが実行されるのは、SceneManagerがビジーで かつ NetworkProjectConfig > Object SettingsSceneLoadSpawnMode.Queuedが選択されている場合のみ です。
  3. Resimulationループの実行。
  4. Forwardループの実行。
  5. 両方のループの実行が完了した 後にOnChangedコールバックが呼び出される。
  6. Interest Managementが更新される。
  7. ResimulationループまたはForwardループの間にFixedUpdateNetwork()NetworkRunner.Shutdown()が呼び出されると、Shutdown Handlingが起動する。

NetworkProjectConfig
Scene Load Spawn Mode設定

トップに戻る

Updateループの開始

Fusion Update Loop Start
Fusion Updateループの開始

トップに戻る

Resimulationループ

ResimulationループはServerModeおよびHostModeでのみ実行します。

Resimulationループは、サーバーまたはホストから受信した、最新のステートでローカルステートを調整します。これは、ネットワークステートを、最新のステートにリセットし、現在の予測済み ローカル ティックまでの 検証済み ステートに含まれる最新の サーバー ティックの全てのティックを 再シミュレーションする ことで行われます。

Fusion Resimulation
Fusion Resimulationループ

トップに戻る

Forwardループ

Forwardループは、SharedModeを含む全てのモードで実行します。

HostMode & ServerMode

The Forwardループは、Resimulationループが現在の既知の[Networked]ステートを調整した後、次の予測されたティックをシミュレーションします。

SharedMode

Forwardループはシミュレーションを実行する唯一のループです。これは、ローカルシミュレーションにステートオーソリティがあるオブジェクトのシミュレーションと、プロキシオブジェクトに受け取ったステートを適用するものです。

Fusion Forward
Fusion Forwardループ

トップに戻る

Updateループの終了

Fusion Update Loop End
Fusion Updateループの終了

トップに戻る

Renderループ

The Renderループは、ゲームプレイやゲームステートに関連のないものすべてに対して使用されます。主な目的は、内挿のエントリや、VFXやアニメーションなどのビジュアルフィードバックロジックを提供することです。

  • Render() は、UnityのUpdate()の全てのメソッドが実行されます。
  • Render() は、Unity'のLateUpdateの全てのメソッドが実行されます。

Shutdown Handlingは、Renderループの間にNetworkRunner.Shutdown()が呼び出された場合に起動します。

Fusion Render
Fusion Renderループ

ドキュメントのトップへ戻る