This document is about: FUSION 2
SWITCH TO

Execution

デフォルトの実行

以下の図は、1つのUnityフレーム内でKCCが使用するFusionコールバックのデフォルトの実行順序を示しています。

kcc execution flow
KCC execution flow.
  • (1)はサーバから新しいデータを受信したときのみ実行される。
  • (2)は1-Nフォワードティックシミュレーション時に実行される。
  • (3) は新しいティックをシミュレートするのに十分なデルタ時間がない場合に実行される。
  • (4)は、シミュレーション待ちの再シミュレーションまたはフォワードティックがさらにある場合に実行される。
  • (5)は、すべての再シミュレーションとフォワードティックのシミュレーションが完了した後に実行される。

以下のシナリオが考えられます。

  1. サーバーから新しいデータを受信 = [Y] 再シミュレーションティック => [X] 順方向ティック => レンダリング更新。
  2. データを受信していない = [X] フォワードティック => レンダリング更新。
  3. データを受信せず、十分な差分時間もない = レンダリング更新のみ。

以下の図は、KCC内部ロジックの実行に続く、Fusionコールバックの詳細な概要を示しています。

kcc execution overview
Detailed overview of KCC execution.

⚠️ Some operations are valid only for input/state authority or proxy. For example proxy never writes to the network buffer. ⚠️ いくつかの操作は、入力/状態権限またはプロキシに対してのみ有効です。例えば、プロキシは決してネットワークバッファに書き込みません。

Authority BehaviorMoveサブルーチンの実行はKCC SettingsセクションのInput Authority BehaviorState Authority BehaviorProxy Behaviorによって定義されます。

Input Authority Behavior Fixed Update Render Update
Predict Fixed | Interpolate Render Move (Predicted) Move (Interpolated)
Predict Fixed | Predict Render Move (Predicted) Move (Predicted)
State Authority Behavior Fixed Update Render Update
Predict Fixed | Interpolate Render Move (Predicted) Move (Interpolated)
Predict Fixed | Predict Render Move (Predicted) Move (Predicted)
Proxy Behavior Fixed Update Render Update
Skip Fixed | Interpolate Render Nothing Server snapshots interpolation
Interpolate Fixed | Interpolate Render Server snapshots interpolation Server snapshots interpolation
Predict Fixed | Interpolate Render Move (Predicted) Move (Interpolated)
Predict Fixed | Predict Render Move (Predicted) Move (Predicted)

手動実行

デフォルトでは、KCC fixed/renderの更新は、ラグ補正をサポートするためにHitboxManagerの前に実行されます。

正確な実行順序を制御するために、手動実行を有効にすることができます。

C#

public class Player : NetworkBehaviour
{
    public KCC KCC;

    public override void Spawned()
    {
        KCC.SetManualUpdate(true);
    }

    public override void FixedUpdateNetwork()
    {
        KCC.ManualFixedUpdate();
    }

    public override void Render()
    {
        KCC.ManualRenderUpdate();
    }
}
Back to top