OnDestroy関数
破棄処理 ▲
MonoBehaviour を継承したクラスをもつゲームオブジェクトが破棄されるタイミングでは OnDestory 関数が呼ばれる
この関数を使って破棄処理(解放処理)を行ったり、消される直前に一度だけ行いたい処理を記述することができる
Unity は C# で記述するためメモリ解放は GC がやってくれるように思われがちだが、
Destroy で破棄したゲームオブジェクトの参照を保持したままだと GC の収集対象とならない
また、参考文献2のとおりテクスチャなどの一部の処理は C++ 側のコードも動いており、メモリリークの原因となってしまう
クラス内で他のクラスの参照を持つ場合は破棄処理にてきちんと null を代入しておく方が良い
メモリリークが発生していないか確認する方法に MemoryProfiler がある。
public class Sample : MonoBehaviour
{
Texture2D tex;
/// <summary>
/// 起動処理
/// </summary>
void Start()
{
tex = new Texture2D(256, 256);
Destroy(tex);
}
/// <summary>
/// 破棄処理
/// </summary>
void OnDestroy()
{
// tex に null を代入することできちんと参照が切れて、
// ガベージコレクションの対象となるため、メモリリークが発生しなくなる
tex = null;
}
}
目次