Impulse のフィルタリング
フィルタリングによって、Impulse Source がインパルス (衝撃、刺激) をいつどのように生成するかを微調整することができます。Cinemachine Impulse は以下の 2 種類のフィルタリングが可能です。
チャンネルによるフィルタリングを使用すると、Impulse Listener が特定の Impulse Source にのみ反応し、他を無視することができます。詳細は下記の チャンネルによるフィルタリング のセクションを参照してください。
Trigger Object Filtering を Collision Impulse Source と併用することで、特定のゲームオブジェクトのみがインパルスをトリガーするように設定できます。詳細は下記の レイヤーとタグによるフィルタリング のセクションを参照してください。
チャンネルによるフィルタリング
デフォルトでは全ての Impulse Listener が、範囲内の全ての Impulse Source に反応する形になっています。チャンネルを使用することで、どの Impulse Listener がどの Impulse Source に反応するかを、より精密に制御することができます。チャンネルによるフィルタリングを設定するには、以下の 3 つを行う必要があります。
- チャンネルを設定します
- Impulse Source が送信を行う 1 つまたは複数のチャンネルを設定します
- Impulse Listener がリッスンする 1 つまたは複数のチャンネルを設定します
特定のチャンネルをリッスンしている Impulse Listener は、そのチャンネルで送信する Impulse Source にのみ反応します。
チャンネルを追加する
CinemachineImpulseChannels スクリプトは、シーン内にチャンネルを作成します。これはデフォルトで 1 つのチャンネルを持っており、最大で 31 個の新しいチャンネルを追加することができます。
新しいチャンネルは以下の手順で追加できます。
CinemachineImpulseChannels スクリプトを以下のいずれかの方法で探します。
Cinemachine Impulse Listener のインスペクター内で、Channel Mask のドロップダウンメニューの隣にある Edit ボタンをクリックします。
Cinemachine Impulse Source または Cinemachine Collision Impulse Source のインスペクター内で、Impulse Channel のドロップダウンメニューの隣にある Edit ボタンをクリックします。
Impulse Channels プロパティーグループを展開し、Size プロパティーに、作成したいチャンネル数を設定してください。新しいアイテムが各チャンネルに表示されます。
作成したチャンネルの名前を変更してください。
チャンネルは追加した時点から、インスペクターの Channel ドロップダウンメニューから利用可能になります。
リッスン/送信チャンネルを設定する
チャンネルの設定が完了したら、Impulse Listener と Impulse Source がそれらを使用する方法を設定する必要があります。
各 Impulse Listener を見て、リッスンしたいチャンネルを Channel Mask ドロップダウンメニューから選択してください。
各 Impulse Source あるいは Collision Impulse Source を見て、送信したいチャンネルを Impulse Channel ドロップダウンメニューから選択してください。
ドロップダウンメニューからは複数のフィルターを選択できます。全てのフィルターを使用する場合は Everything を選択し、どのフィルターも使用しない場合は Nothing を選択します。
レイヤーとタグによるフィルタリング
Unity の レイヤーと タグを使用して、Collision Impulse Source と衝突したりトリガーゾーンに入った時にインパルスをトリガーするゲームオブジェクトを指定できます。これは Trigger Object Filtering と呼ばれます。
Cinemachine Collision Impulse Source コンポーネントには、以下の 2 つの Trigger Object Filter プロパティーが含まれています。
Layer Mask ドロップダウンメニューには、シーンの全てのレイヤーのリストが提供されています。任意のレイヤーを選択 (複数選択可) すると、そのレイヤー内のゲームオブジェクトは、Impulse Source と衝突した時に Impulse をトリガーするようになります。Impulse Source は、他のレイヤーにあるゲームオブジェクトは無視します。
Ignore Tag ドロップダウンメニューは、シーンの全てのタグのリストが提供されています。任意のタグを選択すると、そのタグを持つゲームオブジェクトは、Layer Mask に設定されたレイヤー内にある場合でも、Impulse Source と衝突した時にインパルスをトリガーしなくなります。
例えば、大きな動物が森をドスンドスンと歩いているシーンでは、その動物が巨木と衝突した時にはカメラを振動したほうが良いですが、小さな若木と衝突した時には振動しないほうが良いでしょう。
この場合のひとつの設定方法は、動物を Collision Impulse Source にして、全ての巨木を専用の 1 つのレイヤーに入れ、それをレイヤーマスクとして選択することです。
全ての樹木 (巨木も若木も含め) がすでに同じレイヤー上にある場合は、若木に特別なタグを割り当てて、Ignore Tag プロパティーを使用して若木をフィルターして無視させることもできます。