PrimePoolSizeを使ってプールに確保したNiagaraComponentが別のNiagaraComponentによって破棄される問題について

お世話になっております。

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が正しいと思われるのですがいかがでしょうか?

お手数をおかけいたしまして申し訳ありませんが、ご確認のほどよろしくお願いいたします。

お世話になっております。

当該ループですが、確かに定期的な未使用コンポーネントのクリーンアップ処理と見受けられ、Pair.Keyを渡すのが妥当ではないかというご指摘は、非常に的確であると考えます。

この実装が意図したものなのか、実装ミスなのか、現在開発チームに確認を行っております。

回答が得られ次第、改めてご報告させていただきますので、今しばらくお待ちください。

以上、よろしくお願いいたします。

ご確認ありがとうございます。

引き続きよろしくお願いいたします。

お世話になっております。

開発チームから、本件は実装ミスであり、近くご指摘の通り修正するとのコメントが得られました。

修正状況が追跡可能なように、社内でチケット登録を行い、Public Issue化も申請しました。承認後、下記のURLから修正状況の追跡が可能となります。

このたびは貴重なフィードバックを誠にありがとうございました。

たいへんお手数ですが、当面の間、お手元では直接エンジンのコードをパッチしてご対応いただけますと幸甚です。

以上、よろしくお願いいたします。

ご確認ありがとうございます。

UnrealEngineIssuesへの登録も確認できました。

修正されるまではエンジンコードを書き換えて対応しようと思います。

この度はありがとうございました。

お世話になっております。

ご確認ありがとうございます。

それでは本チケットは回答済みとしてCloseさせていただきます。

今後とも、引き続きよろしくお願いいたします。​