Unity DOTS 入門 (8) - システムの実行順序
「システム」の実行順序を調整する方法を説明します。
・Unity 2019.3.14.f1
・Entities 0.11.1
1. システムの実行順序
「ECS」のシステムの実行順序は、「Entity Debugger」の左側で確認することができます。
◎ 実行タイミング
ツリーの最上位ノードは、システムの「実行タイミング」です。
・Initialization : 初期化時に実行。
・Update : 更新時に実行。
・PreLateUpdate : 表示時に実行。
◎ システムグループ
「実行タイミング」の子ノードは「システムグループ」です。「システム」をまとめてツリー状態に管理しています。実行タイミングごとに、上のシステムから順番に実行されます。
◎ Initialization
・InitializationSystemGroup
・BeginInitializationEntityCommandBufferSystem
・CopyInitialTransformFromGameObjectSystem
・SubSceneLiveLinkSystem
・SubSceneStreamingSystem
・EndInitializationEntityCommandBufferSystem
◎ Update
・SimulationSystemGroup
・BeginSimulationEntityCommandBufferSystem
・TransformSystemGroup
・EndFrameParentSystem
・CopyTransformFromGameObjectSystem
・EndFrameTRSToLocalToWorldSystem
・EndFrameTRSToLocalToParentSystem
・EndFrameLocalToParentSystem
・CopyTransformToGameObjectSystem
・LateSimulationSystemGroup
・EndSimulationEntityCommandBufferSystem
◎PreLateUpdate
・PresentationSystemGroup
・BeginPresentationEntityCommandBufferSystem
・CreateMissingRenderBoundsFromMeshRenderer
・RenderingSystemBootstrap
・RenderBoundsUpdateSystem
・RenderMeshSystem
・LODGroupSystemV1
・LodRequirementsUpdateSystem
・EndPresentationEntityCommandBufferSystem
「Unity DOTS 入門 (1)」のサンプルの「RotatorSystem」は、「Update/SimulationSystemGroup」の子ノードです。更新時に実行されることがわかります。
2. システムの順序付け属性
システムのクラス宣言に、[UpdateInGroup]・[UpdateBefore]・[UpdateAfter]を付加することで、システムの順序を変更することができます。
◎ [UpdateInGroup]
システムを配置するグループを指定できます。省略した場合、デフォルトワールドの「SimulationSystemGroup」に追加されます。
[UpdateInGroup(typeof(<システムグループ>))]
public class <システム> : SystemBase
{
...
}
◎ [UpdateBefore]・[UpdateAfter]
任意のシステムの前または後に、グループ内の更新順序を指定できます。指定する任意のシステムは、同じグループである必要があります。グループの境界を越えた順序付けは、両システムを含む適切な最も深いグループで処理されます。
[UpdateBefore(typeof(<システム>))]
public class <システム> : SystemBase
{
...
}
[UpdateAfter(typeof(<システム>))]
public class <システム> : SystemBase
{
...
}
◎ [DisableAutoCreation]
デフォルトワールド初期化中にシステムが作成されないようにします。システムを明示的に作成および更新する必要があります。
3. システムの順序付け属性の実践
試しに、「Unity DOTS 入門 (1)」のサンプルのシステム「RotatorSystem」の順序を変更してみます。
(1) RotatorSystemに[UpdateInGroup]属性を付加。
[UpdateInGroup(typeof(LateSimulationSystemGroup))]
public class RotatorSystem : SystemBase
{
...
}
(2) 「Entity Debugger」で「LateSimulationSystemGroup」に移動していることを確認。
この記事が気に入ったらサポートをしてみませんか?