固定アップデートネットワーク
概要
FixedUpdateNetwork()
- 略して FUN()
- は、あるティックから次のティックへの新しい状態をシミュレートするときに呼び出されます。FixedUpdateNetwork()
は一定の時間間隔で呼び出されます。この間隔のタイムステップは NetworkProjectConfig
アセットの Simulation > Tick Rate
で定義します。このタイムステップは SimulationBehaviour
と NetworkBehaviour
から Runner.DeltaTime
プロパティを介してアクセスすることができ、シミュレーションロジックに関してUnityの Time.deltaTime
が使用されているようなシナリオで使用するものです。
FUN()
メソッドには全てのシミュレーションロジックが含まれており、刻みを正しく再シミュレーションし、クライアント間で状態を同期させることを保証します。
シミュレーションと再シミュレーション
FixedUpdateNetwork()
は同じ状態遷移に対して複数回呼び出すことができ、サーバーから受け取ったアップデート(ground truth)に基づいて現在予測されている状態を再シミュレーションすることができます。Fusion は再シミュレーションのために FixedUpdateNetwork()
を呼び出す前にネットワークの状態をリセットするので、[Networked]
プロパティでは 再シミュレーション は透過的に行われます。
重要: 通常のローカルな非ネットワーク状態変数(クラスメンバーなど)はリセットされず、単に前方への状態遷移が追加されたとみなされます。
シミュレーションティック
以下のシミュレーションプロパティを FUN()
で使用することで、現在のシミュレーションティックがどの状態であるかを知ることができます(例: Runner.Simulation.IsResimulation
など)。
- IsResimulation:
FixedUpdateNetwork
の内部で使用し、現在シミュレーションされているティックが、以前にローカルでシミュレーションされていたかどうかを判断します。 - IsForward:
FixedUpdateNetwork
の内部で使用し、現在シミュレートされているティックが以前にローカルでシミュレートされていないかどうかを判断します。 - IsLastTick:
FixedUpdateNetwork
内でIsResimulation/IsForward
と一緒に使用し、現在シミュレーションされているティックがシミュレーションループの再シミュレーションまたはフォワードフェーズの最後のティックであるかどうかを決定します。 - IsFirstTick: FixedUpdateNetwork内の
IsResimulation
/IsForward
と組み合わせて使用し、シミュレーションされている現在のティックがシミュレーションループの再シミュレーションまたはフォワードフェーズの最初のティックであるかどうかを決定します。
実行順序
FixedUpdateNetwork
は Resimulation と Forward Loop の両方の中心に位置しています。FUN は [Networked]
状態に影響を与えるすべてのゲームプレイロジックが配置され、実行される場所です。
デフォルトでは、NetworkBehaviours
と SimulationBehaviours
は任意の順序で並んでいます。つまり、同じゲームセッションに参加しているシミュレーションの間で、これらすべてのFUNの実行順序が異なる可能性があります。FUNループの一部であるネットワーク物理シミュレーションは、PhysicsEngine
がPhysics 3D
またはPhysics 2D
に設定されている場合、その「中間」で実行されます。したがって、デフォルトでは、ある種の動作は FixedUpdateNetwork
メソッドが Network Physics の前または後に実行されることになります。
FUNと物理
クラス属性 [OrderedBefore()]
と [OrderedAfter()]
を使用すると、動作を特定の種類の動作の前または後に明示的に並べることが可能です。これらの属性は、シミュレーションで使用する物理の種類(NetworkPhysics2D
またはNetworkPhysics3D
)を指定することによって、ネットワーク物理の前または後に動作を実行させるためにも使用することができます。スクリプト実行コントロール](~~~/manual/script-execution-control)の詳細については、同名のページを参照してください。