Skip to content

State Machine History_j

yiwami edited this page Mar 30, 2015 · 3 revisions

== ステートマシンの履歴 ==

ステートマシンの遷移の History プロパティは、遷移先もしくは「to」のステートに遷移する場合に、遷移先ステートの子マシンでどのステートがアクティブであるかを決定します。この遷移先ステートが子マシンを含まない場合、History は無効です。遷移先ステートが以前に一度もアクティブになったことがない場合も、過去の履歴がないため History は無意味です。遷移先ステートの各マシンが、それぞれ開始ステートになります。

History はステートが以前にアクティブであったことがあり、子マシンを含む場合にのみ有用です。これは、それぞれの子マシンにアクティブなステートがあるためです。History は、ステートマシンが元のステートに戻る場合に、そのステートが最後にアクティブであった時の子マシンの直近のアクティブなステートを復元させるかを決定するのに役立ちます。

History には以下の 3 通りの値が使用可能です。

  • None: 過去の履歴を無視します。遷移先ステートに含まれるそれぞれのアクティブなマシンおよび、それ以下のあらゆるレベルのアクティブな各マシンの開始ステートが、アクティブなステートになります。
  • Shallow: 遷移先ステートに含まれるそれぞれのアクティブなマシンの、最後のアクティブなステートが、アクティブなステートになります。これらのマシンに、アクティブな子マシンを含むステートがある場合、各マシンの開始ステートが、アクティブなステートになります。つまり、1 つだけ下位のレベルの履歴を使用します。
  • Deep: 遷移先ステートに含まれるすべてのアクティブなマシンおよび、それ以下の全レベルで、最後のアクティブなステートが、アクティブなステートになります。
下図のステートマシンの例を参照してください。このマシンには 3 つのレベルがあります。レベル 1 の「True」ステートには、2 つの並列するステートマシン「A」と「B」が含まれます。レベル 2 では、2 番目のステートマシンの「1」のステートに、レベル 3 にあるステートマシン「C」が含まれます。

太線の四角に太字のステート名で示されるステートは、最後に「True」ステートがアクティブであった時の子マシンのアクティブなステートです。たとえば、レベル 1 で最後に「True」から「False」に遷移した前などの場合です。レベル 1 で「False」から「True」への遷移が発生した場合は、「False」から「True」への遷移の History の設定により、振る舞いが異なります。

  • None の場合: 過去の履歴は無視されるため、すべてのアクティブな子マシンがそれぞれの開始ステートで実行を始めます。レベル 2 およびレベル 3 では、すべての子マシンの現在のステートが「1」になります。
  • Shallow の場合: History は、レベル 1 の「True」ステートの直下の、レベル 2 にのみ使用されます。レベル 2 では、ステートマシン A の現在のステートが「2」に、B の現在のステートが「1」になります。これが、レベル 2 の子マシンである A と B の最後のアクティブなステートが「2」と「1」であったためです。レベル 3 では、ステートマシン C のアクティブなステートが「1」になります。このレベルには過去の履歴が適用されず、開始ステートの「1」が使用されます。
  • Deep の場合: History は、レベル 1 の「True」ステート以下の、すべてのレベルに使用されます。レベル 2 では、ステートマシン A の現在のステートが「2」に、B の現在のステートが「1」になります。これが、レベル 2 のマシンである A と B の最後のアクティブなステートが「2」と「1」であったためです。レベル 3 では、ステートマシン C のアクティブなステートは、最後のアクティブなステートの「2」になります。
なお、History はステート自体ではなく、ステートへの遷移のプロパティです。遷移の仕方に応じてステートに異なる History オプションを使用できるため、柔軟性が高まります。
Clone this wiki locally