知らずにメモリリークをさせないために
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が増えていっているようならリークしてます