"Any State"のリンクがあるオブジェクトは消滅しても使用メモリが解放されません

弾幕シューティングのような大量の敵を破壊するゲームを作っています。
テスト中、メモリの使用量が徐々に増加している事に気づきました。

image

原因を調査した所、敵のVSの"Any State"からリンクがある場合、
消滅してもメモリが解放されないようでした。

Godotのモニターでオブジェクト数を監視した所、
"Ant State"のリンク有りで増加、リンク無しで変化無しを確認しました。
リンク条件は"変数の変化"や"攻撃判定に接触"等なんでもよく、
動作中に遷移するかしないかも関係ないようです。
また、別のゲームシーンに遷移しても解放されないようです。
なお、バージョン1.2.6で再現しますが、気づいたのは前バージョンなので
1.2.6の"Any State"の追加機能は関係ないと思います。

テストで使用したプロジェクトを添付いたします。

memorytest.zip (24.3 KB)

これは確かに興味深いです。Any State ノード自体を完全に削除してみましたが、わずかな増加は依然としてありました。Restore 条件の場合、GameObject の参照リストが常に増加していることが原因ではないかと考えています。最終的にはわかりませんが、原因をより詳しく調査できるよう、開発者にこの件を報告しました。

ご指摘いただき、最小限のプロジェクトも提供いただき、ありがとうございます。

「いいね!」 1

ご報告ありがとうございます。

"Any State"のリンク無しでもメモリが増加するのを確認しました。
オブジェクトやリソースは増加していないので、
確かにリストのようなデータが解放されていないかもしれません。

この件と関連していそうですが、パーティクルを出すと消えた後にもオブジェクト数が戻りきらないようです。
たとえば単純に大量にパーティクルを出すだけのステージを作り、「パーティクルを出す → リセットする(消えるまで待っても待たなくても同じ)」を繰り返すと、モニターのオブジェクト数が階段状に増えていきます。

「いいね!」 1

@tamaki 問題が特定され、修正されたことを確認しました。次のパッチで対応されるでしょう。

@udon365 最初の推測として、あなたは「指定時間」か「無制限時間」のどちらを使用していますか?無制限時間を使用している場合、オブジェクトの数が増加している可能性があります。正確な時間を把握していない場合は、実行時が解放されるまで十分な長い時間を設定してみてください。

image

「いいね!」 1

こちらAnyStateの件については本日配信の1.2.7で修正をさせていただきました!

「いいね!」 1

ご対応ありがとうございます。

1.2.7でメモリとオブジェクトが増加しない事を確認いたしました。

申し訳ありません。
パーティクルのオブジェクト数が戻り切らない件、こちらのスレッドのAnyStateメモリリーク問題とは無関係のようですね……。
一応書かせていただくと、「持続時間」のみ設定して、「表示時間を永続化」にはチェックしておりません。
この件ですが、私が「Forward+」でサブエミッターを利用していることが原因かもしれません。

「いいね!」 1