(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]


本ブログの運営者kan.kikuchiが個人で開発したゲームです!


メモリ使用量の大きな変化を検知するApplication.memoryUsageChanged【Unity】


このエントリーをはてなブックマークに追加


この記事でのバージョン
Unity 6000.1.11f1


はじめに

Unityにはメモリ不足を検知するApplication.lowMemoryというイベントがあります。



それと似たような機能で、

メモリ使用量の大きな変化を検知するApplication.memoryUsageChangedというイベントもあります

今回はその紹介です!



なお、スマホ(iOS,Android)用のため、PC(Mac,Windows)では機能しないようなのであしからず。

(ユニバーサルWindowsプラットフォームには対応している)


Application.memoryUsageChanged

使い方は簡単、Application.memoryUsageChangedに処理を設定するだけ。

private void Start(){
  //メモリ使用量変化の検知
  Application.memoryUsageChanged += OnUsageChanged;
}

//メモリ使用量変化時の処理
private void OnUsageChanged(in ApplicationMemoryUsageChange change){
  Debug.Log($"メモリ使用量変化 : {change.memoryUsage}");
  
  //メモリ使用量が危険なほど低くなったら、不要なアセットをアンロード
  if (change.memoryUsage == ApplicationMemoryUsage.Critical) {
    Resources.UnloadUnusedAssets();
    GC.Collect();
  }
}


上記のようにchangeによって、現在の状態が判別できます。種類は以下の通り。

  • Unknown : メモリ使用レベルが不明
  • Low : 安全に大量のメモリを割り当て可能
  • Medium : 安全なメモリ使用レベル
  • High : メモリ不足の危険性がある
  • Critical : メモリ使用量が危険なほど低い


ただし、AndroidはMedium/High/Critical、iOSはCriticalのみと通知されるものが限られています。

(なのでほぼAndroidかUWP用)

さらに状態が変わった時に通知されるだけで現在の状態は分かりません。