トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

Resources-UnloadUnusedAssetsで破棄【Unity】

増え続けるObject(メモリリーク?)

Profilerのメモリを見ているとTotal Objects in SceneTotal Object Countが増え続ける。

f:id:bibinbaleo:20200924202147p:plain

増え続けるのはおかしいこと。破棄されていない。

これをメモリリークというのかな?

ここでいうオブジェクトとはUnityEngine.Objectを継承したクラスのインスタンスになります。
このオブジェクト数が増え続けている場合、どこかで破棄をミスっている可能性があります。

このようにMemoryプロファイラはメモリリークの検出に役立ちます。

【Unity】Profilerの実用的な使い方!パフォーマンス改善に必要な部分だけサクッとまとめ - LIGHT11

 

ゲームの弾を生成し続けているとか、そういう分かりやすい生成はしていない。

あとプロファイラーを詳しく見たら、増えているのはTextureっぽかった。でもその大量にあるTextureの名前が表示されていない。

Texture

Textureは破棄されないんだって。

dream-target.jp

どのTextureを生成し続けているかはよくわからないけど、とにかく破棄する必要がある。

alien-program.hatenablog.com

Resources.UnloadUnusedAssets()

Resources.UnloadUnusedAssets();を呼べば大体のアセットを破棄できる。

tsubakit1.hateblo.jp

リファレンス

docs.unity3d.com

どういうタイミングで呼び出せばいいかよくわからないが、とりあえずUpdate文で5秒ごとに呼び出してみた。

    void Update()
    {
        timeleft -= Time.deltaTime;
        if (timeleft <= 0.0)
        {
            timeleft = 5.0f;

            Resources.UnloadUnusedAssets();
        }
    }

すると、ちゃんと5秒後に増え続けるオブジェクト数がリセットされる。

これでいいんだろうか・・・

根本原因を探したほうが良さそう。

→new Texture2DをUpdateでしている場所見つけた!