4

これを使用して、プレハブが不要になったときにテクスチャをアンロードします (ポップアップです)。

    UISprite[] widgets = gameObject.GetComponentsInChildren<UISprite>(true);

    for (int i = 0, imax = widgets.Length; i < imax; i++)
    {
        UISprite w = widgets[i];

        Debug.Log ("Removing: " + w.gameObject.name);
        if (w.mainTexture)
        {
            Debug.Log ("Removing: " + w.mainTexture.name);
            Resources.UnloadAsset(w.mainTexture);
        }
    }

アンロード後に Texture2Ds がプロファイラーに表示されなくなったため、これは私が見ることができるように機能しています。しかし問題は、ポップアップを再度インスタンス化すると、スプライトが白いボックスのように表示されることです。そのため、ドキュメントに記載されているように、必要なときに再読み込みされません: シーン内のゲーム オブジェクトからアセットへの参照があり、それが使用されている場合、Unity はアクセスされるとすぐにディスクからアセットを再読み込みします。

私が間違っていることは何ですか?

4

1 に答える 1

1

これを少し複雑にしようとしているように見え、メモリからリソースを完全にアンロードしています。シーンから削除したい親ゲームオブジェクトを単純に破棄する必要があります。

Destroy(GameObject);

http://docs.unity3d.com/ScriptReference/Object.Destroy.html

Unity ガベージ コレクターは、シーンへのすべての参照を削除し、未使用のリソースを自動的にアンロードします。

于 2015-02-09T13:13:19.273 に答える