![見出し画像](https://assets.st-note.com/production/uploads/images/129778408/rectangle_large_type_2_d265c209620aeddb287de0ce1a0cd3d9.png?width=1200)
Unreal Engine Niagaraパーティクルの大きさをアクターの大きさで変更する
Niagaraパーティクルの大きさを、レベル上でアクターのスケールを変更することで変えたいと思ったことはないでしょうか?
実際にスケールをかけてみればわかるのですが、パーティクルの見た目の大きさは、パーティクルのスプライトの大きさにもスケールをかける必要があるため、単純にアクターにスケールをかけただけではそれっぽくスケーリングされません。
![](https://assets.st-note.com/img/1707022667344-tPQ8kxLJMb.png?width=1200)
そこでNiagaraのモジュラースクリプトを作成してアクターのスケールをスプライトの大きさに反映する機能を作成して、大きさを変更できるようにしたいと思います。
この記事は、Unreal Engine のデベロッパーコミュニティのスレッドを参考に書きました。
パーティクルをLocal Spaceに変更する
Emitter Properties のLocal Space を有効にします。
この設定を有効にすることで、パーティクルの動きがエミッター空間(Local Space)で計算されるため、エミッターをレベルで移動すると、パーティクルもそれに伴って移動します。スケールに関してもレベルの値の影響を受けるため、エミッターの移動量もスケールによって変更されます。
![](https://assets.st-note.com/img/1707023235880-K1WAY3mgYd.png?width=1200)
![](https://assets.st-note.com/img/1707023644736-E1fqggjDEt.png?width=1200)
上は大きさのわりに位置のブレ具合が大きいままなので似てみえない
Niagaraのモジュラースクリプトを作成する
作成した処理を様々なエフェクトで使用したいため、Niagaraのモジュラースクリプトを作成します。
![](https://assets.st-note.com/img/1707024043232-tdNrDRibta.png?width=1200)
モジュラースクリプトでは以下の画像のようにノードを作成してください。
Map Getで、Engine Owner のスケール(アクターのスケール)を取得し、Particle のスプライトサイズとリボンパーティクルの幅も取得します。アクターのスケールは3Vectorですが、スプライトは2Vector、リボンの幅に関してはFloatなので、Converノードを使用して必要なチャンネルだけにしてください。元のParticle のスプライトサイズとリボンパーティクルの幅にかけて、Map Setで新たなスプライトサイズとリボンパーティクルの幅として設定すれば完成です。
![](https://assets.st-note.com/img/1707024055828-YWrzxzNBlf.png?width=1200)
Emitterにモジュラースクリプトを適用する
Particle Spwanの+ボタンを押して、作成したモジュラースクリプトを呼び出してください。Library Onlyのチェックボックスを外すことで、自分で作成したモジュラースクリプトも検索できるようになります。
![](https://assets.st-note.com/img/1707024515742-afNDYaC8jk.png?width=1200)
配置順は計算の順番に影響します。モジュラースクリプトは必ず Initialize Particle モジュールの直下に配置してください。
![](https://assets.st-note.com/img/1707024437914-YG7f3uK9pu.png)
スケールをかけてみると、同じ見た目のままスケールされていることがわかります。
![](https://assets.st-note.com/img/1707024743626-IU9bbB8cFG.png?width=1200)
![](https://assets.st-note.com/img/1707025036823-GLrZUJezl6.png?width=1200)
使用できないエフェクト
この手法は色々なエフェクトで有効ですが、Local Spaceを有効ににできないタイプのエフェクトでは使うことができません。
例えばContents Exsample の Dynamic Beams などはパーティクルの位置からリボンがある一点に向かって収束する作例なので、Local Spaceを有効にすると収束する点ごと移動してしまい、役割を果たせなくなります。なにか別の方法で終点を制御する必要があるでしょう。
![](https://assets.st-note.com/img/1707025069585-W9JwwpSoTX.png?width=1200)
この記事が気に入ったらサポートをしてみませんか?