0.問題
映像のように、プレイヤー(蝶)に付随してパーティクルを生成するVFXを作った。
蝶のオブジェクトの子にVFXを置いている。
しかしパーティクルがプレイヤーの操作入力の影響を受けないため、プレイヤーの移動と同じだけ平行移動し、自然な印象を受けない。
環境は以下
Unity:2021.3.10f1
VFX Graph 12.1.7
URP 12.1.7
1.原因
ただ単に蝶のオブジェクトの子にVFXオブジェクトを置いていたのが原因。
パーティクルを描画する層がそのまま蝶の動きに合わせて動くため、すべてのパーティクルが蝶の移動に合わせて平行移動することになる。
2.解決法
メニューバー【Component】→【VFX】→【Property Binder】を使う
Property BinderはVFX外のGameObjectの情報を持ってくることができる。
Property Binder は Visual Effect コンポーネント を使ってゲームオブジェクトに取り込める C# 動作です。これらの動作を使って、シーンまたはゲームプレイ値と Visual Effect インスタンスの 開放されたプロパティ を接続することができます。
Property Binder | Visual Effect Graph | 10.7.0
3.実装
パーティクルの作り方は公式等参照してください。
VFX Graph 秋の花火大会とか。
-
メニューバー【Component】→【VFX】→【Property Binders】からPosition Binderを追加
今回はbutterflyのPositionを持ってきたいのでPosition Binderを使う。ほかのも試してみるとよさそう。
-
Property Bindingsリストを編集
Property BindingsのPositionをクリックするとTargetが選べるようになるのでbutterflyのGameObjectをドラッグ&ドロップ
-
VFX Editor側のBlackboardを開き、Positionを受け取る引数を用意
PositionなのでVector3型で受け取るために、右上の+をクリックしてVector3を選択。
用意した引数の名前をPositionに変更する。
-
VFX Editor側で受け取る
VFX Editorで右クリック→【Create Node】→検索から【Position(Property)】を選択してnode配置→nodeとSet Positionをリンク
ポイント
動きを追従したいGameObject(butterfly)と同じ階層にVFXオブジェクトを配置してください。
こうしないと独立した座標系で動かせません。
4.結果
想定通りに動いた
入力と連動して動いてくれないとゲーム性が失われるので、Property Binder活用していきたい。
VFX使いこなせると表現の幅が増えそう。