事の発端
無から自由自在にエフェクトを出現させられるVFXですが、元あるパーティクルから逆に消していくVFXの方法はあまり見ないと思ったので記事にさせていただきました。
既に似たようなものがあったら申し訳ない。
Unity バージョン
Unity 6000.0.10f1
URP使用
作り方
1.Visual Effect GraphをPackageManagerからインストール
注意
VisualEffectGraphをインストールしたら、
PreferencesのVisualEffectsの項目を確認してください。
Experimental Operators/Brlocksにチェックが入っていたらOkです。
※GPU Eventが使えるようになります。
2.VFXを作成する
ProjectウィンドウでVisualEffectGraphを作成(作れるならScene上でもOK)
3.Graphを作る
Graphを作ります。一旦全体を映してから細かく説明させていただきます。
全体図
床パーティクル部分
まず時間経過では消えないパーティクルを生成します。何もしなければ何の反応もしません。
Spawn
SingleBurstにして、床パーティクルを一回だけ出現させるよう設定します。
Countの項目には一回で出すパーティクルの量を入れてください。
(とりあえず1000にしてます)
Initialize Particle
ここで何を出現させるか設定します。(Scriptのprivate void Start()みたいな感じ)
・Set Size Random Uniform
出現させた時、パーティクル一個に対するサイズをA~Bの範囲でランダムに決めます。
・Set Position Random Per Component
A~Bの範囲までランダムにパーティクルを出現させます。
上記の画像の場合だと
x:Aの範囲(5) + Bの範囲(-5 大きさは 5)
y:0
z:Aの範囲(5) + Bの範囲(-5 大きさは 5)
なので図解するとここの範囲から形成されることになります。
・Set Tex Index Random Uniform
もし表示させたいTextureが複数あり、ランダムで切り替えたい場合はこちらのBlockを追加します。
内容としては記入したFlipBookの縦横比から全体の数を求めてるだけです。
一枚の画像を複数枚の画像として扱うので
複数の画像が分かれてるのであれば、サイズを合わせて一枚に結合させてください。
Update Particle
ここでは常に動作する処理を追加していきます。
・Kill Shape Sphere
パーティクルを消すための当たり判定を追加します。出現させた床パーティクルを消す為には一番重要なBlockになります。
・Trigger Event On Die
パーティクルを消した瞬間に判定が返ってくるBlockです。evtからGPU Eventに繋げば、消した後に新しく好きなパーティクルを出現させることができます。なくても大丈夫ですが、見栄え的には消した反応はあった方がリッチに見えます。
※GPU Eventは後程
※TargetTransformについて
Kill Shapeの位置をGameObjectのPositionに同期させることでGame中自在に床パーティクルを消すことができます。
同期させるには、VisualEffectの入っているGameObjectのInspectorにVFX Property Binderを追加し、PropertyにVFXで対応させたいTransform型Property、Targetに同期させたい別のGameObjectをアタッチさせてください。
より詳しく知りたい方はVFX Property Binderと検索してみてください(投げやり)
公式リファレンス↓
https://docs.unity3d.com/ja/Packages/com.unity.visualeffectgraph@10.7/manual/PropertyBinders.html
Output Particle Unlit
結果何を表示させるかの処理をここで設定します。
※ここのFlipBookは複数画像を用意する必要がある場合に設定した、Set Tex Index Random Uniformに入れたFlip Bookと同じ数値を入れてください。
・Orient : Face Camera Plane
パーティクルをカメラ目線にするか決めるBlockです。
消した後のパーティクル部分
ただ単に消すだけのパーティクルだとつまらないので、消した後にパーティクルをアニメーションさせます。
今回のVFXでは、消す用の当たり判定が接触したら、だんだん小さくなって消えてなくなっていくパーティクルを作ります。
Initialize Particle
Kill Shapeでパーティクルを消した場合、どうあがいてもアニメーションをさせる前に消滅してしまいます。なので、「消した瞬間に新しく同じ場所、サイズのパーティクルを出現させる」といった方法を取ってアニメーションさせています。
・Set Position From Source & Set Size From Source & Set Tex Index
読んで字のごとし、床パーティクルでセットしたPositionとSizeの値を設定してくれます。
※Set Tex Indexは複数画像がある場合に必要
Set Tex IndexにくっついているGet Tex Indexの値は、現在の画像番号を返してくれます。
LocationをSourceにすることで今どのTextureが床パーティクルの位置に表示されているかを知れます。
・Set Lifetime Random Uniform
A~Bの範囲でランダムに消す秒数を指定してくれます。
Update Particle
こちらには何もBlockはありませんが、必ず入れておいて下さい。アニメーションしなくなります。
Output Particle Unlit
Flip BookとTextureは床パーティクルと同じものを設定してください。
・Multiply Size Over Life & Set Alpha Over Life
どのようにアニメーションしていくかを設定できます。お好みでAnimationCurveを変更してください。
実践
一番最初に見せたGIFのようになれば完成です。
割とVFX初心者が躓きそう(実際かなり考え込んだ)な部分をまとめた記事にはなったかなと思います。これで何かしらの手助けになれば幸いです。