Property Binder
Property Binder は Visual Effect コンポーネント を使ってゲームオブジェクトに取り込める C# 動作です。これらの動作を使って、シーンまたはゲームプレイ値と Visual Effect インスタンスの 開放されたプロパティ を接続することができます。
例 : スフィアバインダーは、スフィアの開放されたプロパティの位置および半径を、シーンにリンクされたスフィアコライダーの値で自動設定できます。
Property Binder の追加
Property Binder は VFX Property Binder と呼ばれる一般的な MonoBehaviour を通じて追加することができます。この動作では、1 つまたは複数の Property Bindings が使えるようになります。各プロパティバインディングは、開放されたプロパティ とランタイム時またはシーンの要素との間の関係を構築します。
あるいは、Add Component Menu からプロパティバインダーを直接追加することもできます。VFX Property Binder コンポーネントがない場合は、作成されます。
ビルトイン Property Binder
Visual Effect Graph パッケージには、以下のビルトインプロパティバインダーが含まれています。
- オーディオ
- Audio Spectrum to AttributeMap : Audio Spectrum を属性マップにベイクし、Texture2D および単位 Count プロパティに紐づけます。
- ゲームオブジェクト:
- Enabled : ゲームオブジェクトの有効化フラッグを bool プロパティに紐づけます。
- ポイントキャッシュ
- Hierarchy to AttributeMap : 変換ヒエラルキーのターゲット位置を Texture2Ds AttributeMaps と単位 Count に紐づけます。
- Multiple Position Binder: 変換リストの位置を Texture2D AttributeMap と単位 Count に紐づけます。
- 入力
- Axis : 軸入力の float 値を float プロパティに紐づけます。
- Button : ボタンを押す状態のブーリアン値を bool プロパティに紐づけます。
- Key : キーボードキーを押す状態のブーリアン値を bool プロパティに紐づけます。
- Mouse : マウスの一般的値 (位置、速度、クリック) を、開放されたプロパティに紐づけます。
- Touch : タッチ入力の入力値 (位置、速度) を、開放されたプロパティに紐づけます。
- ユーティリティ
- Light : Light プロパティ (色、輝度、半径) を、開放されたプロパティに紐づけます。
- Plane : Plane プロパティ (位置、法線) を、開放されたプロパティに紐づけます。
- Terrain : Terrain プロパティ (サイズ、ハイトマップ) を、開放されたプロパティに紐づけます。
- 変換
- Position: ゲームオブジェクト位置を、ベクトルの開放されたプロパティに紐づけます。
- Position (previous): 前のゲームオブジェクト位置を、ベクトルの開放されたプロパティに紐づけます。
- Transform: ゲームオブジェクト変換を、開放されたプロパティの変換に紐づけます。
- Velocity: ゲームオブジェクト速度を、ベクトルの開放されたプロパティに紐づけます。
- 物理
- Raycast: 物理レイキャストを実行し、その結果値 (hasHit、位置、法線) を、開放されたプロパティに紐づけます。
- コライダー
- Sphere: スフィアコライダーのプロパティをスフィアの開放されたプロパティに紐づけます。
- UI
- Dropdown: ドロップダウンのインデックスを、開放されたプロパティに紐づけます。
- Slider: float スライダーの値を、開放されたプロパティに紐づけます。
- Toggle: トグルのブーリアン値を bool の開放されたプロパティに紐づけます。
プロパティバインダーの作成
プロパティバインダーは、新しい C# クラスをプロジェクトに追加し、UnityEngine.VFX.Utility.VFXBinderBase
クラスを拡張することで作成できます。
VFXBinderBase
クラスを拡張するには、以下のメソッドを実装する必要があります。
bool IsValid(VisualEffect component)
: バインディングができることを検証するメソッドです。VFX Property Binder コンポーネントは、メソッドが true を返すときのみにUpdateBinding()
を実行します。バインディングを決定するためには、このメソッドのすべてのチェックを実装しなければなりません。void UpdateBinding(VisualEffect component)
:IsValid
が true を返すとバインディングを適用するメソッドです。
コード例
以下の例では、float プロパティ値を、現在のゲームオブジェクトと別の (ターゲット) ゲームオブジェクト間の距離に設定する、簡単なプロパティバインダーが示されています。
using UnityEngine;
using UnityEngine.VFX;
using UnityEngine.VFX.Utility;
// VFXBinder Attribute がこのクラスをプロパティバインディングの追加メニューに投入します。
[VFXBinder("Transform/Distance")]
// クラスは VFXBinderBase を拡張する必要があります
public class DistanceBinder : VFXBinderBase
{
// VFXPropertyBinding 属性は特定のタイプの
// VisualEffect プロパティを追加する特殊プロパティドローワーを
// 使えるようにします。
[VFXPropertyBinding("System.Single")]
public ExposedProperty distanceProperty;
public Transform target;
// IsValid メソッドはバインディングが達成できるなら、チェックを実行し返す
// 必要があります。
public override bool IsValid(VisualEffect component)
{
return target != null && component.HasFloat(distanceProperty);
}
// UpdateBinding メソッドは有効であると推定しバインディングを
// 実行する場所です。このメソッドはIsValid が true を返した場合のみ
// 呼び出されます。
public override void UpdateBinding(VisualEffect component)
{
component.SetFloat(distanceProperty, Vector3.Distance(transform.position, target.position));
}
}```