メモとして残します。
[UpdateBefore(typeof(SystemB))] や [UpdateAfter(typeof(SystemB))] などの属性は システムの実行順序 を定義するためのものです。一方で、JobHandle や Dependency は ジョブの実行順序 を定義するために使用されます。
優先順位について
システムの実行順序 ([UpdateBefore] / [UpdateAfter]) は、各システムが実行される順番を決定します。システム自体の実行順序を保証するために役立ちますが、それぞれのシステムの中でスケジュールされるジョブに関しては、これだけでは制御できません。
ジョブの依存関係 (JobHandle や Dependency) は、実際にジョブが実行される順番を制御します。システムがジョブをスケジュールした後、ジョブがいつ実行されるか(あるジョブが他のジョブの完了を待つかどうか)は、JobHandle や Dependency によって管理されます。
具体的な流れ
[UpdateBefore] / [UpdateAfter] によってシステムの実行順序が決定されますが、そのシステム内でスケジュールされたジョブの実行順序は、JobHandle や Dependency によってさらに細かく管理されます。
もし、SystemA が SystemB よりも後に実行されると定義されていたとしても、SystemB 内のジョブが SystemA のジョブに依存するように JobHandle が設定されている場合、SystemB のジョブは SystemA のジョブが完了するまで実行されません。逆に言えば、JobHandle で依存関係が定義されている場合、その依存関係が優先されます。
まとめ
システム実行順序 は [UpdateBefore] や [UpdateAfter] によって制御されますが、これはあくまでシステムがジョブをスケジュールする順序です。
ジョブ実行順序 は JobHandle と Dependency によって制御され、これが最終的にジョブがいつ実行されるかを決定します。
結果として、ジョブの依存関係 (JobHandle や Dependency) の方が実行順序の優先度が高いということになります。