今回はUnityネタをやっていきます。
Particle Systemで作ったパーティクルに外から力を加えて吹き飛ばしてみます。
Particle System Force FieldとWind Zoneの2つのやり方で紹介します。
開発環境
Unity 2020.3.0f1
Particle System Force Fieldとは
Unity2018.3から追加されたParticle Systemに外から力を加えて動きを変化させるコンポーネントです。
実際に試してみる
Particle Systemの用意
適当なパーティクルを用意します。なんでもいいです。
今回はこんな感じの煙がもくもくでるものを用意しました。
External Forcesモジュールの有効化
Particle SystemコンポーネントのExternal Forcesモジュールを有効にします。
これが有効になっていないとForce Fieldからの影響を受けません。
Multiplier:Force Fieldから受ける力の乗数。値が大きいほど
Particle System Force Fieldの作成
Createか右クリックのEffects/Particle System Force Fieldから作成。
影響範囲はColliderのようにギズモで表示されます。
パラメータはこちら
Shape
形状を調整します。球体、半球、シリンダー、ボックスの4種類があります。
それぞれ始点、終点の位置(シリンダーは長さも)を調整できます。
Direction
各方向へ与える力の大きさです。値が大きいほど力が大きくなります。
Curveの設定ができるので強さを時間経過で変化させられます。
Gravity
焦点への引力を設定します。大きいほど引力が強くなり、マイナスになると斥力(反発力)となります。
Focusは焦点の位置です、0だと中心が焦点になり1だと外縁が焦点になります。
Rotation
回転させる力を設定します。
Speedは回転速度、Attractionはパーティクルへの影響度(0~1)、Randomnessは軸毎のランダム性(0~1)です。
Drag
パーティクルを引っ張る(運動を遅くする)力を設定します。
Multiplyを有効にすると、大きさや速度に応じて引っ張る力が大きくなるよう自動で調整が入ります。
Vector Field
Texture3Dを使って影響範囲を設定します(後述)
Particle System Force Fieldの設定
見た目がわかりやすいようSphereを組み合わせてプロペラみたいなのを作りました。
Particle System Force Fieldの子オブジェクトにしておきます。
Particle System Force Fieldのパラメータはこんな感じ、半球でもいいですがシリンダーを選択しました。
これをパーティクルに近づけると、無事エフェクトが吹き飛ばされました。
Wind Zoneでパーティクルを吹き飛ばす
Particle System Force FieldだけでなくWind Zoneでも同様のことができます。
木を揺らすのによく使われるコンポーネントですが、External Forcesが設定されたエフェクトにも作用します。
Createか右クリックの3D Object/Wind Zoneから作成。
風を吹かせる方向がギズモで表示されます。わかりやすいですね。
パラメータはこんな感じ
Mode
Wind Zoneの範囲を設定します。
Sphericalは球体の範囲内で、Directionはシーン全体に影響を与えます。
Main
発生させる風の強さを設定します。
Turbulence & Pulse ~
急激に変化する風や時間の経過で変化する度合い・頻度を設定しますが、
パーティクルには影響しないっぽい
実行すると、Wind Zoneの影響を受けているのがわかります。
TransformのRotationを変化させるだけで方向を制御できるので扱いやすいですね。
シーン全体に作用するため、ステージ全体のエフェクトに影響を与えたい時に便利です。
まとめ
・Particle System Force FieldとWind Zoneを使えば、パーティクルに力を加えて吹き飛ばすことができる
・Particle System側はExternal Forcesを有効にするだけ
以上です。
参考資料
Texture 3Dそのものについてはこちら