お世話になっております。
UNiagaraSystemのPoolPrimeSizeを設定した場合の挙動に不具合ではないかと思われる箇所があったため質問させていただきます。
PoolPrimeSizeを設定することでUNiagaraComponentPoolに指定数のUNiagaraComponentを保持しておくことができます。
使い終わったUNiagaraComponentをプールに戻す際にUNiagaraComponentPool::ReclaimWorldParticleSystemが呼び出されます。
関数内では定期的に一定時間未使用となったUNiagaraComponentの破棄処理が行われています。
この未使用コンポーネントの破棄処理が各プールのUNiagaraSystemではなく、ReclaimWorldParticleSystem関数の引数に渡されたUNiagaraComponentのUNiagaraSystemに設定されてPrimePoolSizeを使って行われており、各プールのNiagaraComponentが余分に削除されたり、未使用なのに削除されなかったりします。
ReclaimWorldParticleSystem関数内の該当箇所は以下のコードになります。
for (auto& Pair : WorldParticleSystemPools) { Pair.Value.KillUnusedComponents(CurrentTime - GNiagaraSystemPoolKillUnusedTime, Asset); }
KillUnusedComponentsの第2引数に渡すのはAssetではなく、Pair.Keyが正しいと思われるのですがいかがでしょうか?
お手数をおかけいたしまして申し訳ありませんが、ご確認のほどよろしくお願いいたします。