ステート
ステートを使うと、オブジェクトのいくつかの見た目を保存して、切り替えられます。照明のスイッチ、ドア、ハイライト、色違いの製品などに使いましょう。
ステートは、オブジェクトの設定を保存したコピーです。位置、色、表示・非表示、選択しているアニメーションなどが含まれます。ステートに切り替えると、オブジェクトはその見た目に戻ります。
ステートを使う場面
| やりたいこと | 使うもの |
|---|---|
| 照明のスイッチ:オンとオフ | ステート |
| ドア:閉まっている、開いている、施錠されている | ステート |
| 3 色展開の製品 | ステート |
| ルートに沿って歩くキャラクター | アニメーション |
| 計算した量だけ変化するもの | パッチまたはスクリプト |
判断の目安はシンプルです。名前の付いた、決まった数の状況なら、ステートの出番です。連続的に変化するものは、アニメーションで扱います。
ステートを作る
- オブジェクトを選択します。
- インスペクターで + new component をクリックし、States を選びます。最初のステート Default に、オブジェクトの今の状態が保存されます。
- + add state をクリックします。新しいステートが選択された状態になります。
- オブジェクトを変更します。移動する、色を変える、非表示にする、などです。変更は、選択中のステートにそのつど保存されます。
- 必要なステートの数だけ、手順 3 と 4 を繰り返します。
ステートをプレビューするには、一覧でそのステートをクリックします。
オブジェクトを編集すると、オブジェクト自体ではなく、選択中のステートが変わります。ステートを作っている間は、これで問題ありません。ただし、ステートを選択したままなのを忘れていると、切り替えたあとで変更が「反映されていない」ように見えることがあります。
ステートを切り替える
イベントで Set state ステップを使います。ステートを選び、必要なら長さとイージングも設定します。
長さを設定すると、なめらかに変化します。オブジェクトは一気に切り替わらず、今の状態から保存した見た目へとなめらかに移ります。アニメーションを作らなくても、アニメーションになります。
| 切り替える場所 | 方法 |
|---|---|
| イベント | Set state ステップ |
| パッチ | set_states ノード |
| スクリプト | States コンポーネントの activeStateId に書き込む |
切り替えに反応する
ステートが変わったオブジェクトで、2 つのトリガーが発火します。
| トリガー | 発火するタイミング |
|---|---|
| State active | 選んだステートにオブジェクトが入ったとき |
| State inactive | オブジェクトがそのステートから出たとき |
1 つのイベントが見張るステートは 1 つで、イベントの State フィールドで選びます。そのため、1 つのオブジェクトがステートごとに違う反応をできます。例えば、条件を使わなくても、ドアが開くときと閉まるときに別々の案内表示を出せます。
タップとは違い、ステートの変化はオブジェクトの親には届きません。
ステートを使わずに一部だけ変える
ステートを丸ごと作らずに、「今のままで、色だけ赤く」したいこともあります。その場合は Override properties ステップを使います。一時的なステートのように、いくつかの値を 1 回だけ適用します。長さとイージングの設定も、Set state と同じようにあります。
ホバーしたときのちょっとしたハイライトや、何かが当たったときのフラッシュに使いましょう。本来のステートは、オブジェクトが実際に持つ状況のために取っておきます。
ステートに保存されるもの
ステートには、オブジェクトのコンポーネントが保存されます。位置、回転、スケール、マテリアル、表示・非表示など、すべてがまとめて切り替わります。
ステートには、オブジェクトの子は保存されません。グループをまとめて切り替えたいときは、それぞれのオブジェクトにステートを持たせてください。そのうえで、1 つのイベントからすべてを切り替えます。ステップの Target object フィールドには、複数のオブジェクトを指定できます。
注意点
- エディターで選択したままのステートに、編集内容が入ります。オブジェクトが何度も古い見た目に戻ってしまうときは、どのステートが選択されているかを確認してください。
- 同じオブジェクトでステートとアニメーションを使うと、互いにぶつかります。どちらか一方にしてください。
- コンポーネントを削除すると、すべてのステートからもそのコンポーネントが削除されます。
- 選択中のステートがなくなった場合は、最初のステートが使われます。
次へ: パッチ — ノードで組み立てるロジックです。