はじめに
レベルに配置したないしはSpawn Emitterで出現させたパーティクルのVelocity等をBlueprintで変化させることは出来ないかな?と思って調べると「Particle Instance Parameter」がヒットしたので紹介と解説をしてみます。
Particle Instance Parameter とは?
UE4のマテリアルでは「スカラー値」や「ベクター値」を「パラメーターに変換」することでBlueprint上で動的に値を変化させることが可能でした。Dissolveエフェクト等で調べていただけると、動的なマテリアルパラメータの変更がわかりやすいと思います。
それと同じ機能がパーティクルにもあります。
それが「Particle Instance Parameter」です。
これはパーティクルを構成しているEmitterのパラメーターを外部に公開することで外部から(Blueprint等)パラメータを変更出来ます。マテリアルのやつと一緒ですね。
Instance Parameter の使い方
ここから Particle Instance Parameter の使い方を解説していきます。
使用するパーティクルは「スターターコンテンツ」にある「P_Fire」を使います。
P_fireの中身を見てみるとエミッターの数が多すぎるので、左端以外のエミッターは全て削除します。
Flamesエミッタに新しくAccelerationモジュール(右クリック>Acceleration>Acceleration)を追加します。
次に詳細パネルの Distribution を「Distribution Vector Particle Parameter」に変更します。
次に公開するパラメータ名とその他必要な設定をします。
「Parameter Name」が現在「None」になっているので適切な名前を設定します。ここではモジュール名と同じ「Acceleration」とします。
Param Modesを展開すると1,2,3それぞれに「DPM Normal」が設定されているので、これを「DPM Direct」に変更します。
これで外部へのパラメータを公開するための準備が整いましたので実際に変更してみます。
開いているマップの適当な場所に配置して、詳細パネルにある「エミッタアクション」の「パラメータを公開」ボタンを押します。
そうすると、ParticlesのInstance Parametersに新しくエレメントが追加されます。
試しにVectorのZを1000くらいにすると配置されたパーティクルが上方向へ飛んでいきます。
ブループリントでパーティクルのパラメータを変更してみる
これまでの設定によりカスケードを介せずパーティクルの加速度を変更出来たと思いますので、今度はブループリントでキー入力に応じて上方向に加速度を追加したり、下方向に加速度を追加したりするようにします。
「アクター」クラスを親としたブループリントを作成します。
コンポーネントに「Particle System」を追加して、設定を済ませたP_Fireを設定します。
アクタクラスを継承したデフォルトのブループリントではキーボード入力を受け取ることが出来ないため、キーボード入力を受け付けるように設定します。
次に必要なVector型の変数を追加します。
グラフにキーボードイベントを追加して、Accelerationへ値を増減させるようにします。
Eキーを押すことで100ずつ増やし、Qキーを押すことで100ずつ減らすようにしました。 |
Tickイベントには公開されているパーティクルのパラメータに対し変数Accelerationの値をセットします。
設定する方法としては Dynamic Material Insntace に対しパラメータを設定する方法とほぼ変わりません。かなり簡単に値を変更することが出来ます。
後は作成したブループリントをレベル上に配置して、Eキーを押すたびに上方向へと火が飛んでいきます。
まとめ
Particle Instance Parameterを使うにあたって必要な設定は以下の通りです。
- Distribution を Distribution Vector Particle Parameter に変更
- Vector型の場合は Param Modes を DPM Direct に変更
- Parameter Name をちゃんと設定する
Distribution Vector Particle Parameter の各パラメータについては以下の公式ドキュメントが参考になると思います。
https://docs.unrealengine.com/latest/INT/Engine/Basics/Distributions/index.html#distributionvectorparticleparam
おまけ
Particle Instance Parameter は当然Vectorだけでは無く色も扱えます。
「Scale Color / Life」モジュールを追加して Distribution を変更することでブループリント上でも扱えます。
その際、パラメータを渡すノードは「Set Color Parameter」となります。
これを利用して以下の様なプレイヤーとの距離に応じて色が変化する炎なんてのも作れます。