Unity
メモリリーク

[Unity]Rendererのmaterialプロパティはメモリリークの原因になりうる

知らずにメモリリークをさせないために

Material(Clone)の恐怖

Rendererに存在しているmaterial,materialsはアクセスした時点で複製が作られる
これは参照元のマテリアルのパラメータが変更されるのを防ぐため

そしてやっかいなのが、このCloneは自動で破棄されない

var materials = Renderer.materials;
int number = Renderer.materials.Length;
Debug.Log( Renderer.material.shader.name );

どんな形であっても、アクセスした時点でCloneは強制的に作られる

対策

sharedMaterial,sharedMaterialsを使う

参照元のマテリアルのパラメータを直で変更する
ただし永続的に変更されるので注意が必要

OnDestroyでしっかり破棄する

var renderer = GetComponent<Renderer>();
int length   = renderer.materials.Length;
for(int i = 0; i < length; ++i)
{
 Destroy( renderer.materials[i] );
}

リークしているかを調べるには

ProfilerのMemoryにあるMaterial Countが増えていっているようならリークしてます