トリガー・ギミック
トリガー・ギミック概要
トリガー・ギミックは空間内のインタラクションを手軽に設定する仕組みです。 Unityのコンポーネントを設定することで利用します。
空間内にはアイテムやプレイヤーなどが存在し、物理演算による衝突やプレイヤーの操作など様々なことが発生します。 それに対して、音をならしたり見た目を変化させるなどでプレイヤーにフィードバックします。 これがインタラクションの基本的な構造です。
トリガーは空間内で起きたことやプレイヤーの操作を検知し、指定されたパラメーターに書き込みます。 ギミックはパラメーターに基づいて、空間やプレイヤーを変化させます。これらを連携させることでインタラクションを作成することができます。
ステート
アイテムやプレイヤーはトリガーやギミックからアクセス可能なパラメーターを持ちます。 このパラメーターひとつひとつをステートと呼びます。
ひとつのアイテムは複数のステートを持つことができ、複数個はキーという文字列により区別されます。 空間インスタンスそのものもステートを持ち、これをグローバルステートと呼びます。
まとめると、空間インスタンスの中には以下のようなステートが存在します。
- アイテムステート: アイテム + キー で識別される
- プレイヤーステート: プレイヤー + キー で識別される
- グローバルステート: キー で識別される
異なるアイテムやプレイヤー間のステートは独立していて、同じキーでも別のステートを指します。
トリガーは書き込み先のステートを指定し、ギミックは読み込み元のステートを指定します。 ステートが持つ値には、スカラー・ベクトル・シグナルに分類され、その中に細かい分類があります。 このような種類をステートの型と呼びます。
- スカラー: Bool, Integer, Float
- Bool: オン/オフのような2値で表現できる値 (例: true)
- Integer: 整数として表現できる値 (例: -4)
- Float: 実数値として表現できる値 (例: 1.234)
- ベクトル: Vector2, Vector3
- Vector2: 二次元の実数値ベクトル
- Vector3: 三次元の実数値ベクトル
- シグナル: インタラクトされた、掴まれた、など単一のできごとの発生タイミングをあらわす
ステートを読み取るときと書き込むときの型は一致している必要があります。
ベクトルは複数のFloatとして読み書きすることもできます。 ベクトルに書き込むときのキーが"key"のとき、ベクトルの各要素は"key.x", “key.y”, “key.z"のようなキーで読み書きできます。
オペレーション
何かが起きて即座に反応するインタラクションはトリガーとギミックだけで作成可能です。
一方で、以下のようなより複雑なケースでは新たな仕組みが必要です。
- トリガーが何かを検知して一定時間後にギミックで何かをする
- 複数のトリガーの情報を組み合わせて判定しギミックで行うことを変える
- 検知した回数を数える
このような複雑なインタラクションを記述するためにオペレーションを使うことができます。
オペレーションはステートを読み何らかの処理を行った上でステートを書き込む仕組みです。 オペレーションそのものは空間の状態を直接検知したり変えたりしないため、トリガーやギミックと組み合わせて利用します。