Shadow など BaseMeshEffect を継承しているクラスの場合 UIVertex を利用する際に List が必要になる
この List を利用 するたびに new していると Mesh の構築頻度によりますが
メモリリークしてしまったり、CPUのスパイクが発生してしまう可能性が高くなります
public override void ModifyMesh(VertexHelper vh) { var output = new UIVertex(); vh.GetUIVertexStream(output);
そのために Unity の内部では ListPool を利用していました
ListPool では static の領域の List を使い回す処理をしていました
ListPool のコードはこちらをご覧くらださい
uGUI/ListPool.cs at eba27f4eca40e88ba5d76c3f439fef950f9f38a5 · Unity-Technologies/uGUI · GitHub
先程の Shadow のコードであれば このようになります
public override void ModifyMesh(VertexHelper vh) { if (!IsActive()) return; var output = ListPool<UIVertex>.Get(); vh.GetUIVertexStream(output);
しかしながら internal なので外部からは利用できません
これを public にしてしまうとなんでもかんでもこれを利用して Relase を忘れると
メモリがやばいことになると考えて internal なんだと思います・・・
何種類もの型 を PoolList で利用することはおすすめしませんが
BaseMeshEffect
を使ったクラスを作成時に、ListPool を利用するのはいいかもしれません