スクリプトの実行制御
概要
Fusion が SimulationBehaviour
と NetworkBehaviour
コンポーネントを実行する際の相対的なスクリプト順序を制御する属性は、主に2つあります。
[OrderBefore]
[OrderAfter]
これらは、FixedUpdateNetwork()
や Render()
など、ほぼ全ての Fusion コールバックに影響します。
[OrderBefore(typeof(MyOtherSimulationBehaviour)]
[OrderAfter(typeof(NetworkTransform), typeof(MyOtherNetworkBehaviour))]
public class MySimulationBehaviour : SimulationBehaviour {
}
ソート処理
リコンパイル中とゲーム起動時に、すべての SimulationBehaviours
がアセンブリ内で見つかり、NetworkPhysicsSimulation3D
と NetworkPhysicsSimulation2D
を除いてアルファベット順にソートされます。
まず、それぞれの SimulationBehaviour
が [OrderBefore]
または [OrderAfter]
属性を持つかどうかをチェックします。どちらもクラスに存在しない場合、親クラスが再帰的に検索され、これらの属性のいずれかを持つ最も近い親の属性が使用されることになります。そして、すべての SimulationBehaviours
がソートされ、すべての OrderBefore
と OrderAfter
属性を満たす決定論的な順序が生成されます。
N.B.: [OrderBefore]
と [OrderAfter]
のタイプはいくつでも指定することができます。もし、これらのスクリプトが解決できない競合を起こした場合、デバッグログにはどのスクリプトが競合しているのかを示すエラーが表示されます。
NetworkPhysicsSimulation3D
とNetworkPhysicsSimulation2D
は、初期状態では他のすべてのアルファベット順のSimulationBehaviours
の後になるようにソートされています。この2つのスクリプトの後に実行するには、[OrderAfter]
属性を使用して明示的に指示する必要があります。
[OrderAfter(typeof(NetworkPhysicsSimulation3D)]
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
ウィンドウは、これらの属性の結果を視覚化するためだけのものです。属性を変更するには、スクリプトで変更する必要があります。