Raspberlyのブログ

Raspberlyのブログ

Unityネタをメインとした技術系ブログです。にゃんこ大戦争や日常なども。そろそろブログタイトル決めたい

【Unityネタ】 パーティクルをParticle System Force FieldやWind Zoneで吹き飛ばす

今回はUnityネタをやっていきます。
Particle Systemで作ったパーティクルに外から力を加えて吹き飛ばしてみます。
Particle System Force FieldWind Zoneの2つのやり方で紹介します。

f:id:Raspberly:20210616030554g:plain

 

 

開発環境

Unity 2020.3.0f1

 

 

 

Particle System Force Fieldとは

Unity2018.3から追加されたParticle Systemに外から力を加えて動きを変化させるコンポーネントです。

docs.unity3d.com

 

 

実際に試してみる

Particle Systemの用意

適当なパーティクルを用意します。なんでもいいです。
今回はこんな感じの煙がもくもくでるものを用意しました。

f:id:Raspberly:20210616014344g:plain

 

External Forcesモジュールの有効化

Particle SystemコンポーネントのExternal Forcesモジュールを有効にします。
これが有効になっていないとForce Fieldからの影響を受けません

f:id:Raspberly:20210616012030p:plain

Multiplier:Force Fieldから受ける力の乗数。値が大きいほど

 

Particle System Force Fieldの作成

Createか右クリックのEffects/Particle System Force Fieldから作成。

f:id:Raspberly:20210616012443p:plain


影響範囲はColliderのようにギズモで表示されます。

f:id:Raspberly:20210616012704p:plain

パラメータはこちら

f:id:Raspberly:20210616012725p:plain

Shape

形状を調整します。球体、半球、シリンダー、ボックスの4種類があります。
それぞれ始点、終点の位置(シリンダーは長さも)を調整できます。

Direction

各方向へ与える力の大きさです。値が大きいほど力が大きくなります。
Curveの設定ができるので強さを時間経過で変化させられます。

Gravity

焦点への引力を設定します。大きいほど引力が強くなり、マイナスになると斥力(反発力)となります。

f:id:Raspberly:20210616014512g:plain f:id:Raspberly:20210616014600g:plain

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の子オブジェクトにしておきます。

f:id:Raspberly:20210616020421p:plain

Particle System Force Fieldのパラメータはこんな感じ、半球でもいいですがシリンダーを選択しました。

f:id:Raspberly:20210616020610p:plain

これをパーティクルに近づけると、無事エフェクトが吹き飛ばされました。

f:id:Raspberly:20210616021635g:plain



 

 

Wind Zoneでパーティクルを吹き飛ばす

Particle System Force FieldだけでなくWind Zoneでも同様のことができます。
木を揺らすのによく使われるコンポーネントですが、External Forcesが設定されたエフェクトにも作用します。

 

Createか右クリックの3D Object/Wind Zoneから作成。

f:id:Raspberly:20210616022900p:plain

 

風を吹かせる方向がギズモで表示されます。わかりやすいですね。

f:id:Raspberly:20210616023850p:plain

 

パラメータはこんな感じ

f:id:Raspberly:20210616023109p:plain

Mode

Wind Zoneの範囲を設定します。
Sphericalは球体の範囲内で、Directionはシーン全体に影響を与えます。

Main

発生させる風の強さを設定します。

Turbulence & Pulse ~

急激に変化する風や時間の経過で変化する度合い・頻度を設定しますが、
パーティクルには影響しないっぽい

 

 

実行すると、Wind Zoneの影響を受けているのがわかります。
TransformのRotationを変化させるだけで方向を制御できるので扱いやすいですね。

f:id:Raspberly:20210616023927g:plain

 

 

シーン全体に作用するため、ステージ全体のエフェクトに影響を与えたい時に便利です。

f:id:Raspberly:20210616024440g:plain

 

 

 

 

まとめ

Particle System Force FieldWind Zoneを使えば、パーティクルに力を加えて吹き飛ばすことができる

・Particle System側はExternal Forcesを有効にするだけ

 

 

以上です。

 

 

 

参考資料

docs.unity3d.com

docs.unity3d.com

www.youtube.com

 

kan-kikuchi.hatenablog.com

 

 

 

Texture 3Dそのものについてはこちら

docs.unity3d.com

www.youtube.com