メインコンテンツまでスキップ

States

state とは、そのオブジェクトがいまどうであるかに名前を付けたスナップショットです。どこに 立っているか、何色か、見えているか、どのアニメーションが選ばれているか。

state に切り替えると、オブジェクトはそのスナップショットの姿に戻ります。機能としてはそれだけですが、 手書きのロジックを驚くほどたくさん置き換えてくれます。

どんなときに使うか

やりたいことstates は…
照明のスイッチ。オンとオフまさに適任
ドア。閉・開・施錠まさに適任
3 色展開の製品まさに適任
パスを歩くキャラクター違います。それはアニメーションです
計算した量だけ変化するもの違います。それはパッチか script です

目安はこうです。名前の付いた、決まった数の状況なら state。連続的に変わるものはアニメーションです。

作りかた

オブジェクトに States component を追加し、state を 1 つ足します。いまの姿がそのまま記録されます。

次のものを作るには、2 つ目の state を追加し、その state を選んだ状態でオブジェクトを変更 します。位置を変え、色を変え、隠す。state は作業しながら記録していきます。

ここが混乱するところです

state を選んでいる間、オブジェクトを編集すると、変わるのはその state のスナップショットで あって、オブジェクト自体ではありません。

state を作っているときはこれが正解ですが、state を選んだままだと忘れていて、切り替えたときに 「変更が残らなかった」と首をひねることになりがちです。

切り替える

イベントからは Set state ステップを使います。state と、任意で時間とイージングを指定できます。

時間を指定すると、変化がなめらかになります。 オブジェクトはいまの姿からスナップショットへ 滑らかに移り、飛びません。この 1 つの項目が、state の切り替えを「自分で作らずに済んだ アニメーション」に変えます。

切り替え元方法
イベントSet state ステップ
patchset_states ノード
scriptStates component の activeStateId に書き込む

切り替えに反応する

state が変わったオブジェクトで、2 つのトリガーが発火します。

トリガー発火するとき
State active指定した state に入ったとき
State inactiveその state から出たとき

イベントごとにどの state を見るかを指定するので、1 つのオブジェクトが state ごとに違う反応を できます。条件分岐なしに、ドアが開くときと閉まるときで別の音を鳴らせるのはこのためです。

これらはオブジェクト自身で発火し、親には伝わりません

タップと違い、state の変化は階層を上っていきません。

state を作らずに少しだけ変える

「いまのままで、色だけ赤く」といったことのために、わざわざ state を定義したくない場合があります。 そのための Override properties ステップです。一時的な state として、その場かぎりの値の組を 適用します。時間とイージングも同じように指定できます。

その場かぎりの強調(ホバー時のハイライト、被弾時のフラッシュ)にはこれを使い、本物の state は そのオブジェクトが本当に持っている状況のために取っておいてください。

state が抱えるもの

スナップショットが保持するのはオブジェクトの component なので、位置・回転・スケール・ マテリアル・可視性なども、すべてまとめて移動します。

state は 1 つのオブジェクトのものです

子は記録されません。グループをまとめて切り替えるには、各オブジェクトに自分の state を持たせ、 1 つのイベントから切り替えてください。ステップのターゲットはリストを受け取れます。

つまずきやすいところ

  • エディターで選んだままの state は、あなたの編集を静かに吸い込みます。オブジェクトが 元に戻ると悩む前に、どれがアクティブかを確認してください
  • 同じオブジェクトの state とアニメーションは、ほかの 2 つのアニメーション機構と同じように 取り合いになります。どちらかを選んでください
  • component を外すと、それを持っていたすべての state からも消えます
  • 選択していた state がもう存在しない場合は、最初の state が使われます

次へ: パッチ