システム内の処理の実行順序 - Katsuya100/SceneLayer-Trial GitHub Wiki

シーケンスイベントの実行順序

シーケンスイベントについてはこちらを参照してください。

遷移と更新の実行順序

一つの遷移におけるイベントの実行順序を下記に明記します。
横軸:フレーム
縦軸:同一フレーム内の処理順(上から順)

gantt
  dateFormat HH:mm
  axisFormat %Mf
  Transition:active, 00:00, 2m
  Entry:active, 00:01, 1m
  PostTransition:active, 00:01, 3m
  Update:active, 00:01, 8m
  PreTransition:active, 00:06, 3m
  Exit:active, 00:08, 1m
  Transition:done, 00:08, 2m

関数レベルに分解すると下記のようになります。

gantt
  dateFormat HH:mm
  axisFormat %Mf
  section Transition
  TransitionBehaviour.OnTransit:active, 00:00, 2m
  LayerBehaviour.OnChildTransit:active, 00:00, 2m
  LayerBehaviour.OnTransitTo:active, 00:00, 2m
  LayerBehaviour.OnTransitFrom:active, 00:00, 2m
  LayerBehaviour.OnParentTransitTo:active, 00:00, 2m
  LayerBehaviour.OnParentTransitFrom:active, 00:00, 2m

  section Entry
  LayerBehaviour.OnEntry:active, 00:01, 1m

  section PostTransition
  TransitionBehaviour.OnPostTransit:active, 00:01, 3m
  LayerBehaviour.OnPostChildTransit:active, 00:01, 3m
  LayerBehaviour.OnPostTransitTo:active, 00:01, 3m
  LayerBehaviour.OnPostTransitFrom:active, 00:01, 3m
  LayerBehaviour.OnPostParentTransitTo:active, 00:01, 3m
  LayerBehaviour.OnPostParentTransitFrom:active, 00:01, 3m

  section Update
  LayerBehaviour.OnUpdate:active, 00:01, 8m

  section PreTransition
  TransitionBehaviour.OnPreTransit:active, 00:06, 3m
  LayerBehaviour.OnPreChildTransit:active, 00:06, 3m
  LayerBehaviour.OnPreTransitTo:active, 00:06, 3m
  LayerBehaviour.OnPreTransitFrom:active, 00:06, 3m
  LayerBehaviour.OnPreParentTransitTo:active, 00:06, 3m
  LayerBehaviour.OnPreParentTransitFrom:active, 00:06, 3m
  
  section Exit
  LayerBehaviour.OnExit:active, 00:08, 1m

  section Transition 
  TransitionBehaviour.OnTransit:done, 00:08, 2m
  LayerBehaviour.OnChildTransit:done, 00:08, 2m
  LayerBehaviour.OnTransitTo:done, 00:08, 2m
  LayerBehaviour.OnTransitFrom:done, 00:08, 2m
  LayerBehaviour.OnParentTransitTo:done, 00:08, 2m
  LayerBehaviour.OnParentTransitFrom:done, 00:08, 2m

Layerの階層間における実行順序

EntryUpdateは親から順に実行されます。
対して、Exitは子から順に実行されます。

横軸:フレーム
縦軸:同一フレーム内の処理順(上から順)

gantt
  dateFormat HH:mm
  axisFormat %Mf
  親Layer.Entry:active, pentry, 00:00, 1m
  子Layer.Entry:active, centry, 00:00, 1m
  親Layer.Update:active, pupdate, 00:00, 8m
  子Layer.Update:active, cupdate, 00:00, 8m
  子Layer.Exit:active, cexit, 00:07, 1m
  親Layer.Exit:active, pexit, 00:07, 1m

Loaderの実行順序

一つのLoader処理におけるイベントの実行順序を下記に明記します。
下記のグラフでは

  • 親子の Layer がある。
  • それぞれ2つずつ Loader を持っている。
  • これらすべてのLoad処理が一斉に走ったとします。

横軸:フレーム
縦軸:同一フレーム内の処理順(上から順)

gantt
  dateFormat HH:mm
  axisFormat %Mf
  section 親
  Loader1.Load:active, pl1, 00:00, 2m
  Loader1.Instantiate:active, pi1, after pl1, 1m
  Loader2.Load:active, pl2, 00:00, 3m
  Loader2.Instantiate:active, pi2, after pl2, 4m

  section 子
  Loader1.Load:active, cl1, after pl1 pl2, 3m
  Loader1.Instantiate:active, ci1, after pi1 pi2 cl1, 1m
  Loader2.Load:active, cl2, after pl1 pl2, 2m
  Loader2.Instantiate:active, ci2, after pi1 pi2 cl2, 1m

各LoaderのInstantiateは、Loadの後に走ります。

子のLoadは親のLoadに依存しているため、親のLoadが終わってから実行されます。
子のInstantiateは親のInstantiateに依存しているため、親のInstantiateが終わってから実行されます。

子同士、親同士の Load Instantiate処理はいずれも並列で処理されますが、互いに依存関係を持たせることも可能です。
依存関係をもたせる方法はLoad順序の制御を参照してください。