TL;DR
Destroy(texture)
またはResources.UnloadUnusedAssets()
またはシーン遷移
DownloadHandlerTexture
DownloadHandlerTexture
は画像をAssetBundleにしなくても使うことができます。
つまり、適当なhttps://example.com/yukamaki.jpg
みたいなのを拾ってきてTexture2Dにまでしてくれるクラスです。
マニュアルを読む限り、textureプロパティにアクセスすることで追加のアロケーションは発生しないと書いてありますが、デコードはメインスレッドなのか、Rawなデータは破棄されているのかあたりが気になるところです。// 今度調べる
RawデータはHandlerのDisposeで消えそうな気がしますが…
AssetBundleで管理している場合はAssetBundle.Unload
でOKです。
Runtime生成Asset
ランタイム生成したAsset(Object
)は基本的にこの扱いになり、DownloadHandlerTexture.texture
はRuntime生成となるようです。
他にも、お馴染みInstanciate(prefab)
やnew GameObject()
、new RenderTexture()
などがこれに当たります。
C#のオブジェクトがGCされたら一緒に解放
class ManagedTexture2D : Texture2D
{
public ManagedTexture2D(int width, int height) : base(width, height){}
// GC時に呼ばれる
~ManagedTexture2D() => Destroy(this);
}
DownloadHandlerTexture
のように、自分でnewしていないときには成すすべ無いので微妙…