UnityのVFXでKillブロックとColliderブロックを使ったサンプル

今回はUnityのVFXのKillブロックとColliderブロックを使ったサンプルを作ってみます。

Killブロックは指定する領域にパーティクルが衝突した時にパーティクルを消滅させるブロックで、Colliderブロックは指定する領域にパーティクルが衝突するようにします。

VFXのブロックについては

UnityのVisual Effect Graphのブロックの個々の機能について見ていきます。

を参照してください。

今回作成したKillブロックを使ったサンプルは以下のようになります。

パーティクルの表示にメッシュとベースカラーマップを指定していますが、今回使用した剣は以下の記事で作成した剣

Blenderを使ってシンプルな剣をモデリングしていこうと思います。シンプルな剣が出来れば、複雑な形状の剣を作成する事も可能かも?しれません。

ベースカラーに指定したUVMapは以下の記事で作成したテクスチャです。

Blenderでモデリングをした剣のUVMapをファイルに出力し、色を塗ってテクスチャを作成して、剣に張ってみます。

設定するメッシュとベースカラーは上記の記事で作成した剣を使用する必要はなくご自由に設定してみてください。

Colliderブロックを使ったサンプルは以下のようになります。

スポンサーリンク

エフェクトを作る前の準備

VFXでエフェクトを作成する前の準備は

Unityで視覚的にエフェクトを作成できるVisual Effect Graphの設定方法と使い方をみていきます。

の記事に書いていますので、設定をしてVFXのテンプレートファイル名をMyVFX2(名前はご自由にお付けください)としておきます。

VFXのテンプレートファイルにデフォルトで作成されているコンテキストは全部選択し削除しておきます(コンテキストと流れを自分で作成します)。

作成したVFXのテンプレートファイルをヒエラルキー上にドラッグ&ドロップしてTransformのPositionのXを0、Yを1、Zを0とします。

それ以外のTransformはデフォルト設定のままです。

剣が飛び出し地面と接触したら消えるエフェクトの作成

まずは剣が飛び出した後に重力で落下し地面と接触したら消えるエフェクトを作成していきます。

Spawnコンテキストの作成

まずはVFXウインドウの何もない所でSpaceキーを押しContext→Spawnを選択します。

Spawnコンテキストを選択した状態でSpaceキーを押してSpawn→Constant Spawn Rateを選択し、Rateに100を設定します。

剣が飛び出し地面と接触して消えるサンプルのSpawnコンテキスト

これで1秒間に100のパーティクルが生成されることになります。

Initializeコンテキストの作成

次は生成したパーティクルの初期化をするInitializeコンテキストの作成をします。

最大パーティクル量Capacityに100を設定します。

Set Velocity Randomブロックの設定

次にInitializeコンテキストを選択した状態でSpaceキーを押してAttribute→Set→Set Velocityを選択します。

インスペクタのRanbomをPer Componentにするとグラフ上でMinとMaxの指定が出来るようになり、この間の数値をランダムに設定出来るようになります。

MinのXを-1、Yを5、Zを-1にし、MaxのXを1、Yを10、Zを1に設定します。

Set Velocity Randomブロックはパーティクルの速度にMinとMaxの間のランダム値を設定出来ます。

Set Lifetime

Initializeコンテキストを選択した状態でSpaceキーを押しAttribute→Set→Set Lifetimeを選択します。

Lifetimeに5を入力します。

Set Lifetimeブロックはパーティクルの生存期間をLifetimeに設定出来ます(単位は秒)。

Set Size

Initializeコンテキストを選択した状態でSpaceキーを押しAttribute→Set→Set Sizeを選択します。

Sizeは1にします。

Set Sizeブロックはパーティクルのサイズを指定します。

ここまで出来たらSpawnコンテキストのSpawn EventからドラッグしてInitializeコンテキストに繋げます。

現時点では

剣が飛び出し地面と接触して消えるサンプルのSpawnとInitializeコンテキスト

上のようになります。

Updateコンテキストの作成

グラフ上の何もない所でSpaceキーを押しContext→Updateを選択します。

Updateコンテキストはマイフレーム実行するコンテキストです。

Gravity

Updateコンテキストを選択した状態でSpaceキーを押しForce→Gravityを選択します。

Gravityブロックはパーティクルに重力を働かせます。

重力加速度は自由に設定出来ますが、今回の場合はデフォルトの設定のままにしておきます。

Kill

Updateコンテキストを選択した状態でSpaceキーを押しKill→Kill(AABox)を選択します。

Kill(AABox)はパーティクルが衝突した時にパーティクルを消滅させる領域を設定するブロックです。

BoxでCenterとSizeを指定して領域を設定します。

今回はヒエラルキー上にCubeを作りPositionをXYZ共に0、ScaleをXは10、Yを1、Zを10として地面にしているので、Kill(AABox)のCenterとSizeを調整してCubeとサイズが合うように調整してください。

今回はCenterのXYZが0、-1、0、SizeのXYZが10、1、10としています。

Killブロックのサイズを地面として使用しているCubeに合わせる

上のように地面として使っているCubeとKillのサイズを合わせます。

これは地面と接触した時にパーティクルが消滅しているように見せる為にサイズを合わせましたが、位置やサイズを合わせないでも消したい領域の位置とサイズにしても問題ありません。

Add Angle.XYZ

Udpateコンテキストを選択した状態でSpaceキーを押しAttribute→Set→Add Angleを選択します。

Add Angleブロックはパーティクルの角度を足していくブロックです。

Angleに指定した角度分をパーティクルの角度に足していきます。

今回は現在のパーティクルの速度を取得しその分の角度を足していく事にします。

次にVFXのグラフ上の何もない所でSpaceキーを押し、Operator→Attribute→Get Attribute : velocityを選択します。

Get Attribute : velocityブロックはパーティクルの現在の速度を取得出来ます。

Get Attribute : velocityのvelocityからドラッグしAdd Angle.XYZに接続します。

ここまで出来たらInitializeコンテキストのParticleからドラッグしUpdateコンテキストに接続します。

ここまでのUpdateコンテキストは以下のようになります。

剣が飛び出し地面と接触して消えるサンプルのUpdateコンテキスト

本当は剣が360度周りに飛び出して放射状に綺麗に動いて剣先が地面と接触するように作りたかったんですが、頭が働かなくて出来ませんでした。(´Д`)

Lit Mesh Outputコンテキストの作成

最後にパーティクル表示のコンテキストであるLit Mesh Outputコンテキストを作成します。

グラフ上の何もない所でSpaceキーを押し、Context→Lit Mesh Outputを選択します。

Meshに表示するメッシュ、Base Colorにメッシュに表示するベースカラーとなるテクスチャを設定します。

UpdateコンテキストのParticleからドラッグしLit Mesh Outputに接続します。

剣が飛び出し地面と接触して消えるサンプルのLit Mesh Outputコンテキスト

これで剣が飛び出して地面と接触したら消えるパーティクルのサンプルが完成しました。

剣が飛び出し地面と衝突したら消えるサンプル画像

Killブロックで指定した領域とパーティクルの発生位置が接触してしまっている場合は発生してすぐにパーティクルが消えてしまう為、パーティクルの発生位置とKillブロックの領域が重ならないように調整してください。

パーティクルの発生位置が変更出来ない!?という方はLit Mesh OutputをWorldに設定してしまっている可能性もあります。

Localが表示されるようにしてください。

Lit Mesh OutputでWorldとLocalを切り替える

切り替え方法はグラフ上でLocalとWorldの部分を押すかLit Mesh Outputを選択した状態でインスペクタのSpaceから変更出来ます。

LocalとWorldを切り替えるだけでパーティクルがうまく生成されなくなることがあったので、パーティクルが生成されている方は切り替えない方がいいかもしれません。

球がコライダと衝突するエフェクトの作成

Killブロックのサンプルが出来たので、次はColliderを使ったサンプルを作成していきます。

Killブロックのサンプルで作ったものを改造して作成します。

Lit Mesh Outputコンテキストの変更

まずはLit Mesh OutputのMeshをSphereにし、Base Color MapにPackage→Visual Effect Graph→TexturesのDefaultParticleを設定します。

VFXのColliderを使ったサンプルのLit Mesh Outputコンテキスト

Lit Mesh Outputコンテキストから変更した理由は単純に見た目が徐々に変わる様を確認しやすいからです。

Initializeコンテキストの変更

次はInitializeコンテキストのSet SizeブロックのSizeを0.5にします。

Updateコンテキストの変更

次にUpdateコンテキストを選択した状態でSpaceキーを押しCollision→Collider(Sphere)を選択します。

Collider(Sphere)のModeをInverted、CenterのYを3、Radiusを3にします。

ModeをInverted(反転)にするとSphere(球)の表面を反転させ通常だと球の外側を衝突判定としますが、球の内部が表面となり球内部で衝突判定されます。

Kill(AABox)ブロックのチェックボックスのチェックを外し無効にします。

これで飛び出したパーティクルの弾がSphere(球)の中に留まるようになります。

UpdateコンテキストのColliderブロックを選択した状態でシーンビューを見ると、

Colliderブロックを使用したサンプル画像

上のようにColliderの領域内にパーティクルが衝突して留まるのを確認出来ます。

スポンサーリンク

記事をシェアして頂ける方はこちら

フォローして頂くとやる気が出ます