notch」タグアーカイブ

[notch]State Machine: 状態遷移の仕方

状態が変化し、表示されるGeometoryが切り替わる
Nodegraphの全体

State Machineとは?

State Machineノードを使うことで、状態遷移でノードを切り替えられ、シーンの状態を管理することができる。公式ドキュメントに従って、Geometryを切り替えるスタディ。

概要

State Machineを使うには、

  • State Machine node
  • State Machine State node
  • State Machine Events node

の3種類のノードが必要になる。Stateは、State Machine nodeの子供に、EventsはStateの子供になる必要ある。

ステート(State)とイベント(Event)

仕組みとしては、EventsのAttributesのActivateが1になった時に、イベントが発火し (きっかけ) 、次のステート(状態)に遷移することになる。移動したいステートには、EventsのOutputから、StateのIncoming Eventsにつなげる。Activateは、0~1の値を取る。

Activate Attribute
ここでは、Event0が発火すると、StateBに遷移する

ステートで切り替えたいGeometryのノードを配置し、Rootに繋げないで、表示したいステートのState nodeにつなげる。表示したいノードは複数持つことができる。ここでは、StateAでは、球体とステート名を表示するText nodeをし、StateBではBoxとステート名、StateCではTorusとステート名を切り替えている。

イベントの発火の仕方

イベントを発火するには、Event nodeのActivate Attributesに、1を送る必要がある。今回は、Accumulator Modifierで、0~3のfloatをカウントアップさせ、

0: Event0
1: Event1
2: Event2

の各イベントを発火させている。

Accumulator ModifierでカウントアップされたValueを一度、Expression Modifierで剰余算(割り算の余りを出す)することで整数化し、Condition ModifierでIF文的に条件分岐をしている。

Event1につながっているCondition ModifierのProperty

例えば、Event1を発火するには、Condition Modifierに入ってきた値が1のときに、条件式が等しくなるので、1をOutputから出力する。1以外のときは、常に0を出力している。

シーンファイルはこちら
https://github.com/arkwknsk/notch/tree/master/20190425_state-machine