PaperSloth’s diary

主にゲーム開発関連についての記事を書きます。

UE4 NiagaraのLifetimeを無制限にする方法

環境

UE4.25.3

結論

説明が長くなってしまったので、最初に結論を書いておきます。
1.
「Particle State」Moduleの「Kill Particles When Lifetime Has Elapsed」フラグをOffにして
同Moduleの「Loop Particles Lifetime」にチェックを入れるだけです。

2.
「Particle State」Moduleの「Kill Particles When Lifetime Has Elapsed」フラグをOffにして
Lifetimeに「Normalized LoopAge」を割り当てる

3. 「Initialize Particle」と「Particle State」を使用しない
f:id:PaperSloth:20201008210315p:plain

概要

Niagara Emitterを作成した際にLifetime無制限のEmitter作成方法が分からず、困ったので調べてみました。
まずはCascadeのおさらいから。
CascadeではLifetimeを使用しないだけで対応が可能でした。
f:id:PaperSloth:20201008190855p:plain

では、Niagaraではどうなるかというと
Initialize Particle Moduleで「Lifetime」のチェックを外しても削除されてしまいます。

BaseとなるNiagara Emitterの作成

今回はemitterのTemplateとして「Fountain」を使用して作成していきます。
f:id:PaperSloth:20201008191257p:plain

名前は「NS_Inifite」としておきました。
まずは一度だけ生成されればよいため、「SpawnRate」を無効化して
「Spawn Burst Instantaneous」を追加して
「Spawn Count」を「1」に設定します。
f:id:PaperSloth:20201008191550p:plain

続いて、「Emitter State」を選択して
「Loop Behaviour」を「Once」に変更して
「Loop Duration Mode」を「Infinite」に変更します。
f:id:PaperSloth:20201008191532p:plain

また、確認のために移動は不要ですので
「Add Velocity in Cone」と「Gravity Force」を無効にします。
f:id:PaperSloth:20201008191752p:plain

次にLifetimeの設定が不要ですので
「Initialize Particle」の「Lifetime」のチェックを外して無効化します。
f:id:PaperSloth:20201008191900p:plain

このままではLifetimeが無制限であっても透明度が更新されて見えなくなりますので
「Scale Color」も無効にしておきます。
f:id:PaperSloth:20201008192237p:plain

Cascade風にいけば、ここまでの設定でLifetime無制限で消えないエフェクトが作成できそうなんですがこのままではまだ消えてしまいます。

ここからLifetimeを無制限にするための方法を3通り紹介していきます。

Niagara でのLifetime無制限の設定方法

まず、設定を変更する前にLevel配置 or SpawnするためにNiagara Systemを作成しておきましょう。
「NS_Inifnite」を選択して右クリックして「Create Niagara System」を選択してください。
作成されたNiagara Systemは「NE_Infinite」にrenameしました。
f:id:PaperSloth:20201008194716p:plain

0. よくある間違い

まずはよくある間違いから。
Lifetimeに大きな値を設定するというものです。
もちろん、これで済むケースもあるかもしれませんが、あまりオススメはできませんね。
結局のところこの設定時間を経過した場合はParticle が消えてしまいますね。
f:id:PaperSloth:20201008194928p:plain

1. Loop Particles Lifetimeを使用する

ここからようやくLifetimeを無制限にする項目になります。
まず「Particle State」を選択して
「Kill Particles When Lifetime Has Elapsed」のフラグを無効にします。
f:id:PaperSloth:20201008195202p:plain

続いて同Module内の
「Loop Particles Lifetime」にチェックを入れます。
これでLifetimeがLoopしてParticle が消えることがなくなります。
f:id:PaperSloth:20201008195323p:plain

動かないのもあれなので、適当に動きを与えました。
これで消えることはないです。
f:id:PaperSloth:20201008205210g:plain

2. NormalizedLoopAgeを使用する

次の方法はNormalizedLoopAgeを使用する方法です。

「Initialize Particle」を選択して「Lifetime」に「NormalizedLoopAge」を指定します。
f:id:PaperSloth:20201008205501p:plain

これだけではまだ不完全で、先程同様に
「Particle State」の「Kill Particles When Lifetime Has Elapsed」のフラグを無効にします。
f:id:PaperSloth:20201008205706p:plain

設定はこの2つだけです。
f:id:PaperSloth:20201008205937g:plain

3. Particle Stateを使用しない

1, 2の設定ではParticle StateのKill Particles...フラグを無効することで対応してきました。
3つ目の方法ではParticle State自体を使用しないというものです。

ひとまず「Particle State」を無効化します。
すると下記のように「Initialize Particle」でエラーが出てしまいます。
f:id:PaperSloth:20201008210214p:plain

エラーを解決するにはParticle Stateが必要ということですね。
ですが、今回は「Initialize Particle」自体も無効化してしまいましょう。
f:id:PaperSloth:20201008210506p:plain

さて、これでエラーはなくなって
Lifetimeの制限もなくなりました。

ですが、これではInitialize Particleで設定していたColorやSprite Size等の情報も無効化されてしまいます。

そのため、「Set new or existing parameter directly」を使用して各Parameterを初期化していきます。
まずは「Particle Spawn」に「Set new or existing parameter directly」を追加します。
f:id:PaperSloth:20201008210720p:plain

f:id:PaperSloth:20201008210802p:plain

これで各Parameterの初期化が行えるようになりました。
「Set Parameters」を選択して右上の「+」アイコンから初期化するParameterを追加していきます。
まずは「Color」を追加しました。
f:id:PaperSloth:20201008211012p:plain

これで初期色情報を設定することができるようになりました。
f:id:PaperSloth:20201008211108p:plain

次にSprite Sizeを設定したいので
「Sprite Size」を追加します。
f:id:PaperSloth:20201008211149p:plain

とりあえず10 x 10程度にしておきました。
f:id:PaperSloth:20201008211237p:plain

このように「Set Parameters」Moduleでは複数のParameterの設定を行うことが可能です。
f:id:PaperSloth:20201008211341p:plain

回転は今回関係ないため、Sprite Rotationは未設定です。

以上で3つ目のLifetime設定方法とSet Parameterの設定紹介が終わりです。
f:id:PaperSloth:20201008211534g:plain

まとめ

Lifetimeを無制限にする方法の設定方法については以上になります。
ついでで紹介したSet Parameterですが、こちらも何気に便利なModuleで結構重宝しています。

実運用する上では極力Levelに配置するのは避けて
必要なタイミングでSpawnして不要になったらDestroyするのがベストではあると思います。

調べてみるとLifetimeを大きな値にしよう!という紹介が多かったため、調べてみました。
何かしら役に立てば幸いです。

以上!よきNiagaraライフを!
f:id:PaperSloth:20201008212052g:plain