【Unity】アプリケーション実行中にメモリ不足を検知する

DEVELOP, Unity

メモリ不足を検知するには、Application.lowMemory にコールバック関数を登録します。

サンプルコード

using System.Collections.Generic;
using UnityEngine;
 
public class Sample : MonoBehaviour
{
    List<Texture2D> textures = new List<Texture2D>();
 
    /// <summary>
    /// メモリ不足時に呼ばれます
    /// </summary>
    public static void OnLowMemory()
    {
        Debug.Log("not enough memory !!!");
 
        // メモリ開放
        Resources.UnloadUnusedAssets();
    }
 
    /// <summary>
    /// 有効時
    /// </summary>
    private void OnEnable()
    {
        // コールバック関数追加
        Application.lowMemory += OnLowMemory;
    }
 
    /// <summary>
    /// 無効時
    /// </summary>
    private void OnDisable()
    {
        // コールバック関数削除
        Application.lowMemory -= OnLowMemory;
    }
 
    /// <summary>
    /// 更新
    /// </summary>
    private void Update()
    {
        // テストコード。メモリ不足になるまでテクスチャを生成し続ける。
        textures.Add(new Texture2D(256, 256));
    }
}

サンプルではマイフレームテクスチャを生成してわざとメモリ不足を発生させています。メモリが少なくなると登録した OnLowMemory が呼ばれます。

Posted by kazupon