1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Unity】出現させたパーティクルをいい感じに消していくVFXの作り方

Last updated at Posted at 2024-08-09

事の発端

無から自由自在にエフェクトを出現させられるVFXですが、元あるパーティクルから逆に消していくVFXの方法はあまり見ないと思ったので記事にさせていただきました。

↓こんな感じのものが作れます
S_1.gif

既に似たようなものがあったら申し訳ない。

Unity バージョン

Unity 6000.0.10f1
URP使用

作り方

1.Visual Effect GraphをPackageManagerからインストール

image.png

注意

VisualEffectGraphをインストールしたら、
PreferencesのVisualEffectsの項目を確認してください。

Experimental Operators/Brlocksにチェックが入っていたらOkです。
※GPU Eventが使えるようになります。

image.png

2.VFXを作成する

ProjectウィンドウでVisualEffectGraphを作成(作れるならScene上でもOK)

3.Graphを作る

Graphを作ります。一旦全体を映してから細かく説明させていただきます。

全体図

image.png

床パーティクル部分

まず時間経過では消えないパーティクルを生成します。何もしなければ何の反応もしません。

Spawn

image.png

SingleBurstにして、床パーティクルを一回だけ出現させるよう設定します。
Countの項目には一回で出すパーティクルの量を入れてください。
(とりあえず1000にしてます)

 

Initialize Particle

image.png
ここで何を出現させるか設定します。(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)
なので図解するとここの範囲から形成されることになります。
タイトルなし.png

Set Tex Index Random Uniform
 もし表示させたいTextureが複数あり、ランダムで切り替えたい場合はこちらのBlockを追加します。
image.png

内容としては記入したFlipBookの縦横比から全体の数を求めてるだけです。

一枚の画像を複数枚の画像として扱うので
複数の画像が分かれてるのであれば、サイズを合わせて一枚に結合させてください。
タイトルなし.png

 

Update Particle

image.png

ここでは常に動作する処理を追加していきます。

一度Update ParticleをInspectorで表示させてAge Particlesのチェックを外しておいてください。このチェックが入っていると、LifeTimeを設定していなくてもパーティクルが消えてしまいます。

image.png

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

image.png

Output Particle Unlit

image.png

結果何を表示させるかの処理をここで設定します。

※ここのFlipBookは複数画像を用意する必要がある場合に設定した、Set Tex Index Random Uniformに入れたFlip Bookと同じ数値を入れてください。

Orient : Face Camera Plane
 パーティクルをカメラ目線にするか決めるBlockです。

消した後のパーティクル部分

ただ単に消すだけのパーティクルだとつまらないので、消した後にパーティクルをアニメーションさせます。

今回のVFXでは、消す用の当たり判定が接触したら、だんだん小さくなって消えてなくなっていくパーティクルを作ります。

Initialize Particle

image.png
GPU Eventから繋げます。

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

image.png

Flip BookとTextureは床パーティクルと同じものを設定してください。

Multiply Size Over Life & Set Alpha Over Life
 どのようにアニメーションしていくかを設定できます。お好みでAnimationCurveを変更してください。

実践

一番最初に見せたGIFのようになれば完成です。

割とVFX初心者が躓きそう(実際かなり考え込んだ)な部分をまとめた記事にはなったかなと思います。これで何かしらの手助けになれば幸いです。

S_1.gif

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?