この記事でのバージョン
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用)
さらに状態が変わった時に通知されるだけで現在の状態は分かりません。