見出し画像

Unreal Engine Niagaraパーティクルの大きさをアクターの大きさで変更する

Niagaraパーティクルの大きさを、レベル上でアクターのスケールを変更することで変えたいと思ったことはないでしょうか?
実際にスケールをかけてみればわかるのですが、パーティクルの見た目の大きさは、パーティクルのスプライトの大きさにもスケールをかける必要があるため、単純にアクターにスケールをかけただけではそれっぽくスケーリングされません。

Niagaraのエフェクト(左)と同じエフェクトにスケールを0.2かけたもの(右)

そこでNiagaraのモジュラースクリプトを作成してアクターのスケールをスプライトの大きさに反映する機能を作成して、大きさを変更できるようにしたいと思います。

この記事は、Unreal Engine のデベロッパーコミュニティのスレッドを参考に書きました。

パーティクルをLocal Spaceに変更する

Emitter Properties のLocal Space を有効にします。
この設定を有効にすることで、パーティクルの動きがエミッター空間(Local Space)で計算されるため、エミッターをレベルで移動すると、パーティクルもそれに伴って移動します。スケールに関してもレベルの値の影響を受けるため、エミッターの移動量もスケールによって変更されます。

スケールを同じ0.2にした、Local Space が無効のエフェクト(上)とLocal Space が有効のエフェクト(下)
上は大きさのわりに位置のブレ具合が大きいままなので似てみえない

Niagaraのモジュラースクリプトを作成する

作成した処理を様々なエフェクトで使用したいため、Niagaraのモジュラースクリプトを作成します。

モジュラースクリプトでは以下の画像のようにノードを作成してください。
Map Getで、Engine Owner のスケール(アクターのスケール)を取得し、Particle のスプライトサイズとリボンパーティクルの幅も取得します。アクターのスケールは3Vectorですが、スプライトは2Vector、リボンの幅に関してはFloatなので、Converノードを使用して必要なチャンネルだけにしてください。元のParticle のスプライトサイズとリボンパーティクルの幅にかけて、Map Setで新たなスプライトサイズとリボンパーティクルの幅として設定すれば完成です。

Emitterにモジュラースクリプトを適用する

Particle Spwanの+ボタンを押して、作成したモジュラースクリプトを呼び出してください。Library Onlyのチェックボックスを外すことで、自分で作成したモジュラースクリプトも検索できるようになります。

配置順は計算の順番に影響します。モジュラースクリプトは必ず Initialize Particle モジュールの直下に配置してください。

スケールをかけてみると、同じ見た目のままスケールされていることがわかります。

別の種類のエフェクトにも有効です。

使用できないエフェクト

この手法は色々なエフェクトで有効ですが、Local Spaceを有効ににできないタイプのエフェクトでは使うことができません。
例えばContents Exsample の Dynamic Beams などはパーティクルの位置からリボンがある一点に向かって収束する作例なので、Local Spaceを有効にすると収束する点ごと移動してしまい、役割を果たせなくなります。なにか別の方法で終点を制御する必要があるでしょう。

この記事が気に入ったらサポートをしてみませんか?