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

スクリプトの実行制御

概要

Fusion が SimulationBehaviourNetworkBehaviour コンポーネントを実行する際の相対的なスクリプト順序を制御する属性は、主に2つあります。

  • [OrderBefore]
  • [OrderAfter]

これらは、FixedUpdateNetwork()Render() など、ほぼ全ての Fusion コールバックに影響します。

[OrderBefore(typeof(MyOtherSimulationBehaviour)]
[OrderAfter(typeof(NetworkTransform), typeof(MyOtherNetworkBehaviour))]
public class MySimulationBehaviour : SimulationBehaviour {

}

トップに戻る

UnityとFusionのコールバックの関連順序

  • FixedUpdate()
  • FixedUpdateNetwork()
  • Update()
  • Render()
  • LateUpdate()

トップに戻る

Update() と LateUpdate()

Render()順序を管理する[OrderBefore]および[OrderAfter]の代替案として、以下のスタンダードなUnityコールバックを使用することもできます。 - Update()は、必ず全てのコンポーネントタイプの全てのFusionRender()呼び出しの前に実行します。 - LateUpdate()は、必ず全てのコンポーネントタイプの全てのFusionRender()呼び出しの後に実行します。

Unityスクリプトの実行順序は、いつも通りUpdate()およびLateUpdate()のスクリプト順序を管理するために使用できます。これらはUnityの通常のUnityコールバックであるためです。

重要: 多くの場合、UnityのFixedUpdate()は使用すべきではありません。Fusionのタイミングメカニズムや、FusionがPhysics.Simulate()を呼び出すレートとは完全に切り離されたものだからです。

トップに戻る

ソート処理

リコンパイル中とゲーム起動時に、すべての SimulationBehaviours がアセンブリ内で見つかり、NetworkPhysicsSimulation3DNetworkPhysicsSimulation2D を除いてアルファベット順にソートされます。

まず、それぞれの SimulationBehaviour[OrderBefore] または [OrderAfter] 属性を持つかどうかをチェックします。どちらもクラスに存在しない場合、親クラスが再帰的に検索され、これらの属性のいずれかを持つ最も近い親の属性が使用されることになります。そして、すべての SimulationBehaviours がソートされ、すべての OrderBeforeOrderAfter 属性を満たす決定論的な順序が生成されます。

N.B.: [OrderBefore][OrderAfter] のタイプはいくつでも指定することができます。もし、これらのスクリプトが解決できない競合を起こした場合、デバッグログにはどのスクリプトが競合しているのかを示すエラーが表示されます。

NetworkPhysicsSimulation3DNetworkPhysicsSimulation2Dは、初期状態では他のすべてのアルファベット順のSimulationBehavioursの後になるようにソートされています。この2つのスクリプトの後に実行するには、[OrderAfter] 属性を使用して明示的に指示する必要があります。

[OrderAfter(typeof(NetworkPhysicsSimulation3D)]

トップに戻る

継承

派生スクリプトが独自のordering属性を持つ場合、デフォルトで親の値が使用されます。しかし、子スクリプトが独自の順序を定義している場合、その順序が自身の実行順序に使用されます。 注: 従って、親スクリプトと子スクリプトの順序属性は加算式ではありません。

トップに戻る

Simulation Inclusion

[SimulationBehaviour] 属性を使用すると、FixedUpdateNetwork() の実行を以下のように制限することができます。

  • 特定のステージ (Resimulation または Forward) のみ
  • 特定のピアモード (Server / Host / Client)
[SimulationBehaviour(
  Stages = SimulationStages.Forward,
  Modes  = SimulationModes.Server | SimulationModes.Host
)]

トップに戻る

Fusion Script Execution Inspector

Fusion Script Order ウィンドウは、メニュー Fusion > Windows > Script Execution Inspector から開くことができます。このウィンドウでは、様々なスクリプトがどのような順番で、どのようなシミュレーション段階で実行されるかが表示されます。

N.B.: スクリプトの実行は、以下の属性によって制御されます。

  • [SimulationBehaviour]
  • [OrderBefore]
  • [OrderAfter]

Fusion Script Execution Inspector ウィンドウは、これらの属性の結果を視覚化するためだけのものです。属性を変更するには、スクリプトで変更する必要があります。

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