Unityのパーティクルシステムの詳細とサンプル

記事内に広告が含まれています。

今回はUnityのParticleSystemの設定項目について見ていきたいと思います。

UnityのParticleSystemを使えばゲーム内で使用するエフェクトを自分で作成する事が出来ます。

以前からParticleSystemを使って血のエフェクトの作成をしたり、

Unityでキャラがダメージを受けた時に自作の血しぶきエフェクトを出す
Unityで主人公キャラや敵キャラがダメージを受けた時にスクリプトからダメージエフェクトを表示させる機能を作成します。

作成したエフェクトをスクリプトからゲーム内に登場させる。

Unityのエフェクトを使い、敵キャラの出現をわかりやすくする
Unityのエフェクトを使い、敵キャラの出現をわかりやすくします。エフェクトにはパーティクルをプレハブにしたものを使用し、スクリプトから敵の位置にインスタンス化していきます。

等を行ってきました。

今後、ParticleSystemを使う時にもっと細かく設定項目の内容を知ることが出来れば作りたいエフェクトが作れるかなと思ったので、今回の記事を作成する事にしました。(*‘∀‘)

自分用の記録記事ってわけですね。(-_-)

スポンサーリンク

ParticleSystemの設定項目を見ていく

ParticleSystemはヒエラルキー上で右クリック→Effects→Particle Systemを選択する事で作成出来ます。

作成したParticleSystemを選択するとインスペクタに設定項目が表示されます。

モジュール毎に分かれており、使用したいモジュールを選択するとそのモジュールを使用します。

それではParticleSystemの設定項目を見ていきましょう。

メインモジュール

まずはParticleSystemのメインモジュール設定を見ていきましょう。

ParticleSystemのメイン設定

  • DurationはParticleSystemが実行する時間(パーティクルの1サイクル)の事で、パーティクルを放出し続ける時間です(Loopingのチェックをしていない時)。
  • Loopingにチェックを入れるとパーティクルを繰り返し放出するように出来ます。
  • Prerwarmはパーティクルのサイクルを1回実行した状態で始めます(Loopingにチェックを入れている必要あり)。
  • Start Delayはパーティクルの放出の始めるのを遅らせる時間です。何秒か遅らせてパーティクルを放出したい時に秒数を指定します。
  • Start Lifetimeはパーティクルの最初の生存期間です右の↓矢印部分で
  • Start Speedはパーティクルの最初のスピードを指定します。
  • 3D Start Sizeにチェックを入れるとX、Y、Zで最初のパーティクルのサイズを指定出来ます。
  • Start Sizeは3D Start Sizeにチェックを入れない時に表示され、パーティクルのサイズのXYZを一括で指定出来ます。
  • 3D Start Rotationにチェックを入れるとX、Y、Zで最初のパーティクルの角度を指定出来ます。
  • Start Rotationは3D Start Rotationにチェックを入れない時に表示され、パーティクルの角度のXYZを一括で指定出来ます。
  • Flip Rotationでは0~1の数値が指定出来、いくつかのパーティクルの方向を反転させるみたいです(ちょっと効果がわかりません・・・)。
  • Start Colorはパーティクルの最初の色を指定します。
  • Gravity Modifierはパーティクルに働かせる重力を指定します。
  • Simulation Spaceはパーティクルのアニメーションを行う空間を指定します。Localはローカルでシミュレーションを行うので親要素を動かすと一緒に動き、Worldは親要素が動いても一緒には動きません。Customは任意のゲームオブジェクトを指定し、それに伴ってシミュレーションを行います。
  • Simulation Speedはパーティクルアニメーションの(全体の)スピードを指定します。
  • Delta TimeはパーティクルをTimeManagerのTimeScaleの値でスピードを変化させるかどうかです。ScaledはTimeScaleの値によって変化し、UnscaledはTimeScaleの値によって変化しません。
  • Scaling ModeはパーティクルのScaleを何に合わせるかです。LocalはParticleSystemのTransformのScaleに合わせ、Hierarchyは階層に合わせ、ShapeはShapeのパーティクルの開始位置に合わせます。この項目はいまいちわかりません。
  • Play On Awakeにチェックを入れると、オブジェクトが生成された時にパーティクルが自動で生成されるようになります。
  • Emitter VelocityはInherit VelocityモジュールとEmission モジュールの速度の計算方法を指定します。RigidbodyかTransformかを選択出来ます。
  • Max Particlesは生成出来るパーティクルの粒子の最大数を指定します。指定数を超えると消えていきます。
  • Auto Random Seedにチェックを入れるとパーティクルの生成をランダムにします。
  • Stop Actionはパーティクルシステムのパーティクルが終了した時にどのようなアクションを起こすかの設定です。Noneは何もしない、DisableはParticleSystemゲームオブジェクトの無効化、DestoryはParticleSystemゲームオブジェクトの削除、CallBackはOnParticleSystemStoppedコールバックがゲームオブジェクトに取り付けられたスクリプトに送られます。Loopingにチェックを入れている時はスクリプトから停止した時に発生します。
  • それぞれの設定項目の右側に↓の矢印項目があるものは、値をどのように決めるかの設定が出来ます。
    Constant(1つ)、Curve(カーブで設定)、Random Between Two Constants(2つの間でランダム)、Random Between Two Curve(2つのカーブ内でランダム)を選べます。

    これ以降のモジュールでも同じように右側に↓の矢印がある項目がありますが、説明は同じなので割愛します。

    Emissionモジュール

    Emissionモジュールはパーティクルの放出の設定項目です。

    ParticleSystemのEmissionモジュール

  • Rate Over Timeは1秒間に放出されるパーティクルの数です。
  • Rate Of DistanceはParticleSystemゲームオブジェクトを移動した距離毎に放出されるパーティクルの数です。
  • Burstsはパーティクルを生成するイベントを設定出来ます。Timeはバーストを放出する時間、Countは放出するパーティクル数、Cyclesはバーストを行う回数、Intervalはバーストのサイクルの間隔時間を設定します。
  • Shapeモジュール

    Shapeモジュールはパーティクルを放出する場所の形状等を設定出来ます。

    ParticleSystemのShapeモジュール

  • Shapeはパーティクルの放出場所の形状を指定します。選択出来る形状はSphere、Hemisphere、Cone、Donut、Box、Mesh、Mesh Renderer、Skinned Mesh Renderer、Circle、Edge、Rectangleです。
  • ParticleSystemのShapeの選択出来る形状

    上の画像のような形状からパーティクルを放出します。Mesh RendererはMesh Rendererコンポーネント、Skinned Mesh RendererはSkinned Mesh Rendererコンポーネントを持っているゲームオブジェクトを指定する事が出来ます。

    Shapeの設定によってその下に表示される形状の設定項目が変わります。

    一部違う設定項目になるのでまずはそれを見ていき、最後に共通部分を見ていきます。

    Sphere、Hemisphereで表示される項目

    ParticleSystemのShapeをSphere

    Radiusは半径です。
    Radius Thicknessは半径の厚さです。0だと外面から、1だと全体からパーティクルを放出します。

    Cone、Circleで表示される項目

    ParticleSystemのShapeをCone

    Angleはコーンの角度。
    Radiusは半径。
    Radius Thicknessは半径の厚さ。
    Arcはパーティクルを放出する円弧の角度を指定します。
    Modeはどのように円弧の周りにパーティクルを放出するかです。Randomはランダムに、Loopは円弧の周りに連続的に、Ping-PongはLoopと同じですが1週したら反対方向になります。Burst Spreadは形状の周りに均等に分散します。
    Spreadは広がりの設定です。
    Speedは放出位置が円弧の周りを移動する速度です。
    Emit Fromはパーティクルを放出する位置で、Baseはコーンのベース部分から、Volumeは内部からでLengthでコーンの長さを指定出来ます。

    CircleはAngleやEmit Fromはありません。

    Donutで表示される項目

    ParticleSystemのShapeをDonut

    Radiusはドーナツ全体の半径。
    Donut Radiusはドーナツの厚みの円の半径。
    Radius Thicknessはパーティクルを放出する場所の設定で、0はドーナツの外側、1は領域全体から放出されます。

    後はSphereのArcの設定項目等と同じです。

    Boxで表示される項目

    ParticleSystemのShapeをBox

    Emit Fromはどこからパーティクルを放出するかで、Volumeは体積全体、ShellはBoxを形成している外面、Edgeは外面を形成している辺。
    ShellとEdgeはBox ThicknessでXYZの値を設定する事が出来、0は外側、1は領域全体となります。

    Mesh、Mesh Renderer、Skinned Mesh Rendererで表示される項目

    ParticleSystemのShapeをMesh

    Typeはパーティクルが放出される位置を指定します。Vertexは頂点から、Edgeは辺から、Triangleは面の三角形部分(面を三角形で構成しているので面)からになります。
    MeshやMesh Renderer、Skinned Mesh Rendererにはそれぞれ対応するMesh、Mesh Rendererコンポーネントを持つゲームオブジェクト、Skinned Mesh Rendererコンポーネントを持つゲームオブジェクトを指定します。

    Single Materialは特定のサブメッシュから放出する場合にチェックし、数値はマテリアル番号を指定します。
    Use Materialにチェックを入れると設定したメッシュの頂点カラーをパーティクルに適用します。
    Normal Offsetは放出するメッシュの面からの法線方向の距離を指定します。

    Rectangleは設定する項目が個別にありません。

    Shapeモジュールの共通項目

    一部Shapeの設定によって変わりますが、ほとんど同じなので一括で見ていきます。

    ParticleSystemのShapeの共通設定項目

  • Textureはパーティクルの着色や破棄に使用するテクスチャを指定します。
  • Clip Channelはパーティクルを破棄する時に使用するテクスチャのチャンネルを選択します。
  • Clip Thresholdは破棄する閾値を指定します。
  • Color affects Particlesはパーティクルカラーをテクスチャカラーでかけます。
  • Alpha affects Particlesはパーティクルアルファをテクスチャアルファでかけます。
  • Bilinear Filterlingはテクスチャの大きさにかかわらずパーティクルの色をよりスムーズに見せる為のフィルタリングをするかどうかのチェックです。
  • ここまでの設定は元のパーティクルの色やアルファ値(透明度)に指定したテクスチャの色やアルファ値をかけて変化させる項目のようです。

  • Positionはパーティクルを放出する形状の位置のオフセット値を指定します。
  • Rotationはパーティクルを放出する形状の角度のオフセット値を指定します。
  • Scaleはパーティクルを放出する形状のスケールのオフセット値を指定します。
  • Align To Directionは最初の移動方向に合わせてパーティクルの向きを向けます。
  • Randomize Directionはパーティクルの方向をランダムにします。0は変えない、1は完全にランダムにします。
  • Spherize Directionは球の方向にパーティクルの方向を向かせます。0は変えない、1は完全に球の方向
  • Randomize Positionはパーティクルの発生位置をランダムにします。0の場合は変えない。
  • UV Channelはテクスチャのサンプリングに使用するソーステクスチャのUVチャンネルを指定します(何のこっちゃ・・・)。
  • Velocity over Lifetimeモジュール

    Velocity over Lifetimeモジュールはパーティクルが生成されてから消滅するまでの速度の設定が出来ます。

    ParticleSystemのVelocity over Lifetimeモジュール

  • LinearのXYZはそれぞれの方向の速度を指定します。
  • Spaceは参照する軸を指定し、LocalかWorldを選択出来ます。
  • Orbitalは軌道を設定します。XYZはその軸を回転するスピードを指定します。
  • OffsetはOrbitalの軌道の中心位置を指定します。
  • Radialはパーティクルの半径方向の速度を指定します。
  • Speed Modifierは現在のパーティクルの移動方向にこの値をかけます。
  • Limit Velocity over Lifetimeモジュール

    Limit Velocity over Lifetimeモジュールはパーティクルが生成され消滅するまでのパーティクルの速度の減衰の設定をすることが出来ます。

    ParticleSystemのLimit Velocity over Lifetimeモジュール

  • Separate Axesにチェックを入れるとXYZで個別にパーティクル速度の制限値を設定出来ます。Space項目が表示され速度制限をLocalかWorldのどちらかにします。
  • SpeedはSeparate Axesにチェックを入れない時に表示され、一括でXYZの値を指定出来ます。
  • Dampenは速度の制限値を超えたら速度を減衰します。0は変化なしで1は完全に
  • Dragは抵抗値を指定します。
  • Multiply by SizeはDragの値によってパーティクルのサイズが大きいほど抵抗が大きくなります。
    Multiply by VelocityはDragの値によってパーティクルの速度が大きいほど抵抗が大きくなります。

    Inherit Velocityモジュール

    Inherit Velocityモジュールは時間経過でParticleSystemのオブジェクトの移動に対してのパーティクルの速度変化についての設定です。

    ParticleSystemのInherit Velocityモジュール

  • Modeはどのようにパーティクル速度に適用するかの設定で、Initialはパーティクルが発生した時に速度を適用し、Currentは現在発生しているパーティクルに速度を適用します。
  • Multiplierはパーティクルに適用する速度の割合です。
  • Inherit Velocityモジュールを有効にしてParticleSystemのゲームオブジェクトを動かすとパーティクルの速度に変化が現れます。

    Force over Lifetimeモジュール

    Force over Lifetimeモジュールではパーティクルに力を加えることが出来ます。

    ParticleSystemのForce over Lifetimeモジュール

  • XYZでそれぞれの軸に力を加えます。
  • SpaceはLocal軸にするかWorld軸にするかの設定です。
  • RandomizeはXYZでの値の指定をRandom系にした時に表示され、チェックをするとよりランダム化するようです。
  • Color over Lifetimeモジュール

    Color over Lifetimeモジュールはパーティクルの生存期間での色と透明度の遷移を設定出来ます。

    ParticleSystemのColor over Lifetimeモジュール

    Colorの色の部分をクリックするとGradient Editorが開きます。Gradient Editorの設定の↓の矢印部分が透明度の設定マークで、↑の矢印部分が色の設定マークになります。

    左側がパーティクル生成時、右側がパーティクル消滅時になるのでそこにマークを追加し、パーティクルの色や透明度を変化させていくということになります。

    マークは追加したい部分をクリックし、削除したい時は選択した状態でDeleteキーを押します。

    Color by Speedモジュール

    Color by Speedモジュールでは速度によってパーティクルの色を変化させる設定が出来ます。

    ParticleSystemのColor by Speedモジュール

  • Colorで変化する色と透明度を設定します。
  • Speed Rangeで速度の範囲を指定します。
  • Size over Lifetimeモジュール

    Size over Lifetimeモジュールはパーティクルの生存期間でサイズを変化させる設定が出来ます。

    ParticleSystemのSize over Lifetimeモジュール

  • Separate Axesにチェックを入れるとXYZそれぞれの軸でのサイズ変化を設定出来ます。
  • Sizeのグラフをクリックするとパーティクルの生存期間でパーティクルサイズがどのように変化するかを設定出来ます。
  • Size by Speedモジュール

    Size by Speedモジュールは速度によってサイズがどのように変化するかを設定出来ます。

    ParticleSystemのSize by Speedモジュール

  • Separate AxesでXYZそれぞれの軸での変化を設定出来ます。
  • Sizeのグラフをクリックするとサイズの変化を設定出来ます。
  • Speed Rangeで速度の範囲を指定出来ます。
  • Rotation over Lifetimeモジュール

    Rotation over Lifetimeではパーティクルの生存期間での角度の変化を設定出来ます。

    ParticleSystemのRotation over Lifetimeモジュール

  • Seperate AxesでXYZそれぞれの軸での設定が出来ます。
  • Angular Velocityで1秒ごとの回転角度を設定出来ます。
  • Rotation by Speedモジュール

    Rotation by Speedモジュールでは速度に応じて回転する角度を設定出来ます。

    ParticleSystemのRotation by Speedモジュール

  • Separate Axesにチェックを入れるとXYZ軸それぞれの設定が出来ます。
  • Angular Velocityは1秒間の回転速度です。
  • Speed Rangeは速度の範囲を指定します。
  • Speed Rangeが設定出来るのはAngular Velocityの右の矢印でCurve系の設定をした時だけです。

    External Forcesモジュール

    External Forcesモジュールを有効にすると、Wind Zoneによる影響を設定する事が出来ます。

    ParticleSystemのExternal Forcesモジュール

  • MultiplierはWind Zoneの力が適用される倍率です。
  • Wind Zoneに関しては

    Unityのパーティクルシステムを使って雨や雪を降らす
    Unityのパーティクルシステムを使って雨や雪をゲーム中に降らせていきます

    の記事や

    Unityで木が風になびく機能を追加する
    Unityで木が風になびく機能を追加する

    を参照してみてください。

    Noizeモジュール

    Noiseモジュールでパーティクルの動きにノイズを加える設定が出来ます。

    ParticleSystemのNoiseモジュール

  • Separate AxesをチェックするとXYZ軸それぞれの設定が出来ます。
  • strengthはパーティクルのどれだけ強いノイズを加えるかの値です。
  • Frequencyは周波数で、値が低いと滑らかなノイズ、値が高いと急速に変化するノイズになります。
  • Scroll Speedはノイズフィールドを移動させるスピードでより不規則な動きを作ります。
  • Dampingを有効にするとノイズ強度が周波数に比例するようになります。同じ挙動で異なるサイズのノイズを発生させる時に良いようです。
  • Octavesはノイズのレイヤー数を指定します。この数を増やすことでより豊かなノイズが生成出来ますが、パフォーマンスが落ちます。
  • Octave Multiplierはノイズレイヤーを加えた時の強度を減少させる時の割合値です。
  • Octave Scaleはノイズレイヤーを加えた時の周波数の減少をさせる時の割合値です。
  • Qualityはノイズの品質の設定です。
  • Remapにチェックを入れると、最終的なノイズの値を新しい範囲に再マップします。
  • Remap CurveはRemapにチェックを入れると選択出来、変化をCurveで設定する事が出来ます。
  • Position Amountはノイズがパーティクルの位置にどれだけ影響するかの乗数
  • Rotation Amountはノイズがパーティクルの回転にどれだけ影響するかの乗数
  • Size Amountはノイズがパーティクルのサイズにどれだけ影響するかの乗数
  • Collisionモジュール

    Collisionモジュールはパーティクルが他のゲームオブジェクトと衝突した時の設定をすることが出来ます。

    ParticleSystemのCollisionモジュール

  • Typeは衝突のタイプを指定します。Planesは平面、Worldはシーンビューのその他ゲームオブジェクトの衝突を行います。
  • Typeで選択したものによってこの後の項目が変わります。

  • Worldの場合はModeで2Dか3Dを選択出来ます。
  • Planesの場合はPlanesにシーンビューに配置しているゲームオブジェクトを設定する事が出来、そのゲームオブジェクトの向きの平面が衝突面となります。
  • VisualizationはPlanesのシーンビューでの表示方法の選択で、Gridはグリッド表示、Solidは平面を塗りつぶしたような表示になります。
  • Scale PlaneでPlaneのサイズを変更出来ます。
  • 4方向の矢印のアイコンでPlanesに設定したオブジェクトの位置の変更、回転のアイコンでオブジェクトの回転が出来ます(元のオブジェクトを選択せずともそのオブジェクトの位置や角度が変更出来る)。
  • Dampenは衝突した時にパーティクルを減速させるのにかける値
  • Bounceは衝突した時にパーティクルの跳ね返りにかける値
  • Lifetime Lossは衝突した時にパーティクルの寿命を減らすのにかける値
  • Min Kill Speedは衝突時にこの速度より小さい値の時にパーティクルを消滅させます。
  • Max Kill Speedは衝突時にこの速度より大きい値の時はパーティクルを消滅させます。
  • Radius Scaleはパーティクルの衝突に使用するコライダの半径を指定します。
  • Collision Qualityは衝突の質を設定します。High、Mideum、Lowから選択出来ます。
  • Collides Withでは衝突対象のレイヤーを選択します。
  • Max Collision Shapesはパーティクル衝突の為に使用する衝突形状の数を指定します。
  • Enable Dynamic Collidersにチェックを入れると動的なゲームオブジェクト(動くゲームオブジェクト)との衝突も行えます。
  • Collider Forceはパーティクルが衝突した時に相手方に加える力を設定します(相手方がRigidbodyを持ってないと駄目かも?)。
  • Multiply by Collision Angleにチェックを入れるとパーティクルと衝突面との角度に基づいて力を拡大します。
  • Multiply by Particle Speedにチェックを入れるとパーティクルの速度に応じて力を拡大します。
  • Multiply by Particle Sizeにチェックを入れるとパーティクルのサイズに基づいて力を拡大します。
  • Send Collision Messagesにチェックを入れるとOnParticleCollisionメソッドが呼び出されます。
  • Visualize Boundsにチェックを入れるとシーンビューで衝突のコライダを表示したシミュレーションを見ることが出来ます。
  • ここでSend Collision Messagesにチェックを入れた時に発生するOnParticleCollisionメソッドについて見ていきます。

    Send Collision Messagesにチェックを入れるとParticleSystemのゲームオブジェクト、衝突したコライダを持つゲームオブジェクト、またはその両方を持つゲームオブジェクトでOnParticleCollisionメソッドが呼び出されます。

    そこで以下のようなスクリプトを作成し、ParticleSystemを持つゲームオブジェクトと衝突されるゲームオブジェクトに取り付けます。

    すると衝突したパーティクル側、衝突されたゲームオブジェクト側のどちらもOnParticleCollisionメソッドが呼ばれることが確認出来ました。

    Triggers

    Triggersモジュールはパーティクルが接触した時の動作を設定する事が出来ます。

    ParticleSystemのTriggersモジュール

  • Collidersにはパーティクルが接触した時にトリガーする相手方のコライダを設定します。例えば相手方がCubeであればCubeのコライダをCollidersに設定します。右の+のアイコンをクリックすると設定するコライダの数を増やせます。
  • コライダの発生タイミングは4つあります。

  • Insideはコライダの内側にいる時
  • Outsideはコライダの外側にいる時
  • Enterはコライダに侵入した時
  • Exitはコライダから出ていった時
  • それぞれIgnore(無視)、Kill(消滅)、Callback(イベントをトリガー)を選択できます。

  • Radius Scaleはパーティクルのコライダの半径を指定します。
  • Visualize Boundsはシーンビューでパーティクルのコライダを表示します。
  • 少し勘違いしやすいのがCollidersに設定するコライダはパーティクルが接触する相手のコライダを指定する事です。

    ここで接触相手のコライダを設定しない限りコライダの接触判定は行われません。

    スクリプトでの操作について少し見ていきます。

    例えばInside、EnterにCallbackを指定したとします。

    ParticleSystemのTriggersのInside、EnterをCallbackにする

    CallbackにするとイベントをトリガーするのでOnParticleTriggerメソッド内でトリガー条件に合致するものを取得する事が出来ます。

    OnParticleTriggerメソッド自体はParticleSystemのTriggersにチェックを入れると呼び出されるようです。

    上のスクリプトをParticleSystemのオブジェクトに取り付けます。

    このスクリプトでは設定したコライダに接触、コライダ内に入ったパーティクルを削除しています。

    削除するだけならEnterやInsideをKillにすれば出来ますが、今回はスクリプトでパーティクルを操作したい時の為のサンプルなので気にしないでください。

    GetTriggerParticlesでイベントが発生したパーティクルのリストを取得出来ます(Callbackにしていない場合は取得出来ない)。

    そのイベントがトリガーされたパーティクルのremainingLifetime(パーティクルの最小寿命)を0にし、ParticleSystemのSetTriggerParticlesメソッドでそのパーティクルを再設定し、消滅するようにしています。

    OnParticleTriggerメソッド内でpsがnullでないかどうかを判定していますが、これはParticleSystemのメインモジュールのPrewarmをチェックしているとStartメソッドでParticleSystemの参照がpsに入っていないことがある為です。

    取得したパーティクルのリストからパーティクル1つ1つに対する何らかの処理をしたい時はCallbackにして操作出来ます。

    TriggerモジュールとCollisionモジュールは似ていますが、Collisionの場合は衝突が発生し、パーティクルが移動してしまいます。パーティクルが何らかのゲームオブジェクトと接触したが衝突はさせずに接触したという状況で何らかの事をしたい時はTriggerが良さそうですね。

    Sub Emittersモジュール

    Sub EmittersモジュールはメインのParticleSystemの特定の段階でサブのパーティクルを発生させる為の設定です。

    ParticleSystemのSub Emittersモジュール

    Sub Emittersでは自身の子要素に配置したParticleSystemを設定し、自身の特定のタイミングで子要素のParticleSystemのパーティクルを発生させます。

    タイミングとしてはBirth(パーティクルが発生した時)、Collision(パーティクルが衝突した時)、Death(パーティクルが消滅した時)、Trigger(パーティクルが接触した時)、Manual(スクリプトから)となります。

    タイミングがCollision、Death、Trigger、Manualの場合は子要素のサブエミッターとして使うParticleSystemはEmissionモジュールのBurstsを設定しておく必要があります。

    サブエミッターのParticleSystemのEmissionでBurstsを設定する

    上はサブエミッターとして使う子要素のParticleSystemのEmissionモジュールの設定です。

    Inheritでは親のパーティクルシステムのプロパティ値を子のパーティクルシステムのプロパティに継承することが出来ます。

    継承出来るプロパティ値はColor、Size、Rotation、LifetimeでEverythingを選択すると全てのプロパティ値を継承します。

    サブエミッターの使い方は文字だけだとわかりにくいので少しサンプルを作成してみます。

    ヒエラルキー上で右クリック→Effects→Particle Systemを選択し親のパーティクルシステムを作成し、

    パーティクルをCubeにぶつかるように発生させる

    上のようにCubeにパーティクルがぶつかるような感じで設定を行います。

    CollisionモジュールでTypeをWorldにし、物理的に当たるようにします。

    次は今作成したParticleSystemの子要素に新たにParticleSystemを作成し、名前をSub Particle Systemとします。

    親のパーティクルシステムの子要素に子のパーティクルシステムを作る

    子要素のParticleSystemのEmissionモジュールを有効にし、Burstsを追加します。

    Rendererモジュールを有効にし、Materialの部分を適当なマテリアルを設定します。

    子要素のパーティクルシステムの設定

    これで子要素のパーティクルシステムの設定が終わったので、親のパーティクルシステムを選択し、Sub Emittersに子要素のパーティクルシステムをドラッグ&ドロップして設定し、タイミングにCollisionを選択します。

    すると、

    パーティクルが衝突した時にサブエミッターを起動するサンプル

    上のように親のパーティクルがCubeにぶつかるとその位置から子のパーティクルが発生します。

    タイミングをManualにした時にスクリプトからサブエミッターを起動する方法もやってみましょう。

    親のパーティクルシステムのCollisionモジュールを有効にし、他のゲームオブジェクトと衝突出来るようにしておきます。

    親のパーティクルシステムのゲームオブジェクトに以下のスクリプトを取り付けます。

    StartメソッドでParticleSystemコンポーネントを取得します。

    OnParticleCollisionメソッドはパーティクルが衝突した時に呼ばれるので、その時にParticleSystemのTriggerSubEmitterメソッドに設定したサブエミッターの番号を指定し、そのサブエミッターをトリガーしています。

    Texture Sheet Animationモジュール

    Texture Sheet AnimationモジュールはTextureを使ってパーティクルのグラフィックを静止画でなくアニメーションを用いることが出来るようになります。

    ParticleSystemのTexture Sheet Animationモジュール

  • ModeはGrid(Materialに割り当てられたTextureを使用)とSprite(1つのスプライト内の個々の画像を使用)を選ぶ事が出来ます。
    GridモードはRendererモジュールに設定したMaterialをタイル毎に分けその分割した画像をアニメーションにし、Spriteはスプライト内の個々の画像をアニメーションにします。
  • TilesはGridモードの時に表示され、アニメーションに使う画像の分割をX軸Y軸で何分割するかを指定します。
  • AnimationはGridモード時に表示され、Whole Sheet(グラフで設定)とSingle Row(シートの各列で別々のアニメーションシーケンスを使用)を選択出来ます。
  • Random RowはAnimationをSingle Rowにした時に表示され、チェックを入れると全ての列のランダムでアニメーションをします。
  • RowはRandom Rowにチェックを入れない時に表示され、何列目の画像でアニメーションを行うかを指定します。
  • Frame over Timeは時間の経過でどのようにアニメーションを変化させるかを設定します。
  • Start Frameはどのフレームからアニメーションをするかを指定出来ます。
  • Cyclesはパーティクルの生存期間中にアニメーションシーケンスを繰り返す回数です。
  • Fliv Uはパーティクルの一部のテクスチャを水平に反転します。0~1の値を設定出来、数値が大きいほど反転する率が上がります。
  • Fliv Vはパーティクルの一部のテクスチャを垂直に反転します。0~1の値を設定出来、数値が大きいほど反転する率が上がります。
  • Enable UV ChannelはどのUVストリームがパーティクルシステムに影響されるかを指定します(何のこっちゃ)。
  • このモジュールも説明だけ見ると分かりづらいのでサンプルを作成してみます。

    まずは以下のような画像を用意します。

    サンプルの4つの番号が書かれた2Dスプライト

    Unityに取り込みます。

    次にGridモードで使用する為に、Assetsエリアで右クリック→Create→Materialを選択し、名前をNumberMaterialとします。

    NumberMaterialのインスペクタのAlbedoに先ほど作成し取り込んだ画像をドラッグ&ドロップします。

    NumberMaterialのAlbedo

    ParticleSystemのRendererモジュールのMaterialにNumberMaterialをドラッグ&ドロップします。

    次にTexture Sheet Animationを有効にします。

    Texture Sheet AnimationモジュールでModeをGridにした時のサンプル設定

    上のようにTilesのXYを2にし、Textureを縦横2分割にして4つの領域をアニメーションするようにします。

    Frame over Timeは

    Frame over Timeのサンプル設定

    上のようなグラフにし、パーティクル生存期間中に4→0へと遷移するようにします。

    こうすることで作成した4つの領域が順番にアニメーションされていく為、4、3、2、1というアニメーションになります。

    ParticleSystemのTexture Sheet AnimationのModeをGridにしたサンプル動画

    ModeをSpriteにする時はUnityに取り込んだ数字の画像をSpriteにしSprite Editorでアニメーションに使う画像に分割します。

    番号の画像をSpriteにし4分割にする

    上のようにSpriteの画像を4分割にします。

    Texture Sheet AnimationのModeをSpriteにし、個々の画像を設定します。

    Spriteにそれぞれの画像を指定

    RendererモジュールのMaterialにはNumberMaterialを設定しておきます。

    後はGridモードと同じような感じでアニメーション設定を行います。

    Lightモジュール

    Lightモジュールはパーティクルが光を放射する為の設定が出来ます。

    ParticleSystemのLightモジュール

  • Lightにはパーティクルが光を放射する時のライトを指定します。指定出来るのはPoint LightとSpot Lightです。Light自体のTransformは関係がなくLightコンポーネントの設定自体がパーティクルのライトに影響するみたいです。
  • Ratioはライトを放射するパーティクルの割合を0~1で指定します。
  • Random Distributionはランダムにライトを放射するパーティクルを割り当てるかどうかのチェックです。
  • Use Particle Colorにチェックを入れるとパーティクルの色で最終的な色が調整されます。チェックを入れない時はLightのColorになります。
  • Size Affects RangeをチェックするとLightのRangeがパーティクルのサイズで乗算されます。
  • Alpha Affects IntensityをチェックするとLightのIntensityがパーティクルのアルファ値で乗算されます。
  • Range Multiplierはパーティクルの生存期間にわたってライトのRangeに乗算する値
  • Inteinsity Multipierはパーティクルの生存期間にわたってライトのIntensityに乗算する値
  • Maximum Lightsは最大のライト数です。数値を大きくすると多くのパーティクルから光を放射しますが、処理が遅くなります。
  • それでは実際にPoint Lightを設置してそれをParticleSystemのLightモジュールに設定し、パーティクルが光を放射するサンプルを作成してみます。

    まずはヒエラルキー上で右クリック→Light→Point Lightを選択します。

    ParticleSystemのLightモジュールに設定するPoint Light

    上のようにRangeを10にし、Colorを赤色にしました。

    Transformが影響しないことを確認する為、Xの位置を-1000にしました。

    ParticleSystemのLightモジュールに作成したPoint Lightを設定します。

    ParticleSystemのLightモジュールのサンプルの設定

    Point Lightの色を使用する為に、Use Particle Colorのチェックを外しました。

    ParticleSystemのLightモジュールを設定したサンプル動画

    上のようになりました。

    Trailsモジュール

    Trailsモジュールはパーティクルに軌跡を設定する事が出来ます。

    ParticleSystemのTrailsモジュール

  • ModeではParticle(パーティクルの軌跡)とRibbon(パーティクルの年齢でパーティクルを繋げる)を選択出来ます。
  • Modeによって、多少設定項目が異なるのでまずはParticleの設定項目を見ていきます。

  • Ratioは軌跡が割り当てられるパーティクルの割合を0~1の間で設定します。
  • Lifetimeは軌跡の頂点の生存期間を設定します。設定値はパーティクルの生存期間の乗数です。
  • Minimum Vertex Distanceは軌跡に新しい頂点が加えられる前にパーティクルが移動する距離を指定します。
  • World Spaceにチェックを入れると軌跡の頂点がSimulation SpaceをLocalにしていてもパーティクルシステムのゲームオブジェクトに連動しません。
  • Die with Particlesにチェックを入れるとパーティクルが消滅した時に一緒に軌跡も消滅します。
  • 次はModeがRibbonの時の設定項目です。

  • Ribbon Countはパーティクルシステム全体でレンダリングするリボンの数です。1だと1つのリボンでパーティクルを連結し、2だと2つのリボンで連結しますが、パーティクルの生成順でその連結するパーティクルを決定するようです。
  • Split Sub Emitter Ribbonsはサブエミッターとして使用するParticleSystemで使用し、チェックを入れるとサブエミッターとして放出されたパーティクルでリボンを繋ぎます。チェックを入れない場合は他のサブエミッターのパーティクルともリボンを繋ぎます。
  • Modeで設定が変わるのはここまでで後は共通の設定項目になります。

  • TextureModeはテクスチャの全体の長さに応じてどのように表示するかの設定です。Stretchは伸ばす、Tileは元の画像をテクスチャの長さ分繰り返す、DistributePerSegmentはセグメント毎に分配、RepeatPerSegmentはセグメント毎に繰り返す。
  • Size affects Widthをチェックすると軌跡の幅はパーティクルのサイズで乗算されます。
  • Size affects Lifetimeをチェックすると軌跡の生存期間はパーティクルのサイズで乗算されます。
  • Inherit Particle Colorにチェックを入れると軌跡の色はパーティクルの色で調整されます。
  • Color over Lifetimeは軌跡の生存期間で色の変化を設定します。
  • Width over Trailは軌跡の全長にわたる幅を設定します。
  • Color over Trailは軌跡の全長にわたる色を設定します。
  • Generate Lighting Dataにチェックを入れると法線と接線を含むトレイルジオメトリが作成されます(ちょっとわかりません)。
  • Trailsモジュールを使ったサンプルを作成してみましょう。

    メインのParticleSystemの子要素にサブエミッターとして使用するParticleSystemを設置している状態にします。

    メインのParticleSystemのTrailsにチェックを入れますが、軌跡に使用するマテリアルがRendererのTrail Materialに設定されている必要がある為、そこに設定をします。

    ParticleSystemのTrailsサンプル用のメインパーティクルシステムの設定

    子要素のParticleSystemのTrailsを有効にし、ModeをRibbonにし、Split Sub Emitters Ribbonにチェックを入れます。

    サブエミッターのパーティクルシステムのTrailsでSplit Sub Emitters Ribbonをチェック

    メインのParticleSystemのSub Emittersで子要素のParticleSystemを設定し、Collisionでサブエミッターが軌道するようにしておきます。

    メインのパーティクルシステムでサブエミッターの設定をしておく

    Collisionモジュールも有効にし、他のゲームオブジェクトと衝突出来るようにしておきます。

    これで設定が出来たので確認してみましょう。

    ParticleSystemのTrailsのサンプル動画

    メインのパーティクルは通常の軌跡でサブのパーティクルではリボンでパーティクルが連結されているのがわかります。

    custom Dataモジュール

    Custom Dataモジュールはパーティクルにアタッチ出来るカスタムのデータをエディターで定義出来るようです。

    スクリプトとシェーダーでこのデータを使うようですが、使い方がわからない為、この項目は省略させて頂きます・・・・・(-_-)

    Rendererモジュール

    Rendererモジュールはパーティクルの表示に関する設定を行う事が出来ます。

    ParticleSystemのRendererモジュール

  • Render Modeではレンダリングするモードを選択します。Billboardは常にカメラの方向を向き、Stretched Billboardはカメラの方向を向き見た目の速度が強調されます。Horizontal BillboardはXZ平面と並行、Vertical BillboardはY軸方向に直立になりカメラの方向を向きます。Meshは指定したメッシュの形状になり、NoneはパーティクルのレンダリングをせずTrailsだけを表示したい時などに使います。
  • Render ModeがStretched Billboardの時だけ設定出来る項目があるのでそれについて見ていきます。

  • Camera Scaleはカメラの動きに合わせてパーティクルを引き延ばします。
  • Speed Scaleはパーティクルの速さに合わせてパーティクルを引き延ばします。
  • Length Scaleは速度の方向にそってパーティクルの現在のサイズに比例して引き延ばします。
  • Normal Directionはパーティクルのグラフィックに使われるライティングの法線方向の指定です。0はスクリーンの中心に向かう法線、1はカメラ位置の法線。
  • Materialはパーティクルのレンダリングに使用するマテリアルを設定します。
  • Trail Materialはパーティクルの軌跡のレンダリングに使用するマテリアルを設定します。
  • Sort Modeはパーティクルの表示の重なり順の設定です。Noneはなし、By Distanceはカメラからの距離、Oldest in Frontは古いものを前面に、Youngest in Frontは新しいものを前面にします。
  • Sorting Fudgeはパーティクルのソート順のバイアス設定です。値が低いと他のパーティクルを含む透明なオブジェクトの前に描画される可能性が高くなるようです(詳しい事はわかりません)。
  • Min Particle Sizeは他の設定にかかわらず最小のパーティクルサイズの設定で、ビューポートのサイズに対する割合で表示されます。
  • Max Particle Sizeは他の設定にかかわらず最大のパーティクルサイズの設定で、ビューポートのサイズに対する割合で表示されます。
  • Render Alignmentはパーティクルのビルボードが向く方向を指定します。Viewはカメラの方向を向きます。Worldはワールド軸に整列します。LocalはゲームオブジェクトのTransformに整列します。Facingはカメラゲームオブジェクトの位置を向きます。Velocityはパーティクルの速度方向を向きます。
  • Pivotはパーティクルの回転の中心のピボット点を設定します。
  • Visualize Pivotはピボット点をシーンビューで見られるようにします。
  • Maskingはマニュアルに説明がなかった為、省略します。
  • Custom Vertex Streamsはマテリアルの頂点シェーダで使用できるパーティクルプロパティを設定出来ます(シェーダーで使うようです)。
  • Cast Shadowはライトがパーティクルに当たった時の影の設定です。Offは影を作らない、Onは影を作る、Two Sidedはメッシュの両面から影を作り、Shadows Onlyはパーティクルは表示せず影だけ表示します。
  • Receive Shadowにチェックを入れると、影をパーティクルに落とします。
  • Motion Vectorsはモーションベクターのレンダリングに関する設定です。Camera Motion Onlyはカメラの動きのみを使って追跡、Per Object Motionはオブジェクト毎の動き、Force No Motionはゼロのモーションのレンダリングをします。
  • Motion Vectorsに関しては

    Unityマニュアルーパーティクルレンダラー(非推奨)ー

    UnityスクリプトリファレンスーRenderer.motionVectorGenerationModeー

    を参照してください。わたくしにはわかりませぬ・・・・(-_-)

  • Sorting LayerはレンダラーNoneはソーティングレイヤーの名前です。
  • Order in Layerはソーティングレイヤー内のレンダリング順です。
  • Light Probesはプローブに基づいたライティングの補間モードの設定です。
  • Reflection Probesはリフレクションプローブの設定です。
  • 一部わからない部分はだいぶ端折ってあります・・・・(^_^;)

    詳細は最後に記載した参考サイトのUnityマニュアルから見てみてください。

    終わりに

    ここまででParticleSystemの全モジュールの設定項目を見てきました。

    本来であればこの後は

    「実際にサンプルのパーティクルを作成してみましょう!」という「僕の悪い癖」(杉下右京風)が出てしまうところですが、

    さすがに

    「もう疲れたよパトラッシュ」(ネロ風)状態になるまで疲弊しているので、パーティクルの実例はまた今度別の機会にでも記事に出来たらと思っております。

    参考サイト

    正確で詳細な内容はUnityマニュアルの

    Unityマニュアルーパーティクルシステムー

    上の記事から順に辿ると設定項目の詳細が書かれています。

    タイトルとURLをコピーしました