この記事でのバージョン
Unity 2018.4.0f1
はじめに
今回はUnity2018.3から追加されたParticle System Force Fieldを試してみた感じの記事です!
Particle System Force Fieldは名前の通り、
範囲内に入ったパーティクルに重力等の力を加えて動きを変えるもので、
Effector2Dのパーティクル版と考えると分かりやすいかもしれません。
イメージとしては以下のような感じ。(パーティクルの設定は色以外全て同じ)
Particle Systemの設定
まず、Particle Systemはデフォルトの状態ではParticle System Force Fieldの影響は受けないので、
影響は受けるようにExternalForcesを有効にする必要があります。
ちなみにMultiplierが影響受ける度合いで、
数値を増やすほどより強く影響を受けるようになります。
また、Influence Filterで影響を受ける対象の設定方法を決められます。
Layer Maskだと指定したLayerのものにだけ影響を受けるようになり、
Listだと、Listに追加したものにだけ影響を受けるようになり、
Layer Mask And Listだと、どちらか一方、もしくは両方に該当したものに影響を受けるようになります。
Particle System Force Fieldの作り方
次にParticle System Force Fieldの作り方ですが、
Particle Systemなどと同様に、Createメニューから生成出来ます。
なお、生成したParticle System Force Fieldを選択するとSceneビュー上に影響範囲が表示されます。
Particle System Force Fieldの設定項目
Particle System Force Fieldには色々な設定項目があるので、この項ではそれらを説明してきます。
Shape : 影響範囲の設定
Shapeでは影響範囲の設定が行えます。
形はSehere(球)、Hemisphere(半球)、Cylinder(円柱)、Box(箱)の4種類から選べ、
StartRangeで影響範囲の開始地点(これより内側は力が作用しない)、
EndRangeで影響範囲の終了地点(これより外側は力が作用しない)、
そしてLengthで影響範囲の高さを設定できます。
Direction : パーティクルに加える力のベクトル
Directionではパーティクルに加える力のベクトルを設定できます。
Gravity : パーティクルを引っ張る力
Gravityではパーティクルを引っ張る力(重力)を設定できます。
Strengthで引っ張る(マイナスなら押し出す)力の強さ、
Focusで重力が発生する場の割合(?)を設定できます。
Rotation : パーティクルを回転させる力
Rotationではパーティクルを回転させる力を設定できます。
Speedで回転の速度、
Attractionでパーティクルがどれだけ影響されるかの割合、
Randomnessでランダム性を設定できます。
Drag : パーティクルの動きを止める力
Dragではパーティクルの動きを止める力を設定できます。
Strengthで止める力の大きさを設定できます。
なお、multiplyDragByParticleSizeでパーティクルが大きいほど止める力が大きくなり、
multiplyDragByParticleVelocityでパーティクルが速いほど止める力が大きくなります。
VectorField : 3Dテクスチャで指定した力を加える
VectorFieldでは3Dテクスチャで指定した力を加える事ができます。
正直、使い方が良く分かってない機能です。
そもそも3Dテクスチャとはなんぞやという話ですが、公式のマニュアルには以下のようにありました。
3D テクスチャはスクリプトからのみ作成できます。以下のスニペットは、X、Y、Z の各軸が赤、緑、青の色の値に対応する3D テクスチャを作成します。
名前の通り3Dのテクスチャで、
試しに上記のコードで生成したやつを.assetで保存してみたら、以下のような感じになりました。
texture = CreateTexture3D (256); AssetDatabase.CreateAsset (texture, "Assets/Texture3D.asset"); AssetDatabase.Refresh();
さらに、この生成した3DテクスチャをVectorFieldを設定してみると、以下のようになりました。