iOSアプリ開発では、メモリの使いすぎがクラッシュやパフォーマンス低下の大きな原因になります。
Unityアプリでも、リアルタイムでメモリ使用量を取得して監視できれば、より安定したゲーム・アプリ運営が可能になります。
この記事では、UnityからiOSの実メモリ使用量を取得する方法を、コピペOKのプラグイン+スクリプト形式で詳しく解説します!
この記事で分かること
- Unity標準APIだけではiOSメモリを完全に監視できない理由
- iOSネイティブ(mach API)を使った正確なメモリ取得方法
- 【コピペOK】Objective-C++プラグイン+Unity C#コード
- メモリ監視を活用したアプリ安定化・クラッシュ防止テクニック
なぜUnity標準APIだけではダメなのか?
Unityには標準で
UnityEngine.Profiling.Profiler.GetTotalAllocatedMemoryLong();
という関数がありますが、
これはあくまでUnityエンジン内部ヒープ領域のメモリ使用量のみを示します。
一方、iOSシステム側では、
- テクスチャ
- ネイティブコード使用メモリ
- システムリソース
など、Unity外のリソースもまとめた「本当の使用量」が問題になります。
このため、正確な監視にはiOSのネイティブAPI(mach API)を使う必要があります。
【コピペOK】iOSメモリ使用量取得プラグイン作成手順
.mmファイルを作成する
まず、
Assets/Plugins/iOS/MemoryUsagePlugin.mm
を作成し、以下のコードを記述します。
#import <mach/mach.h>
extern "C" {
size_t GetUsedMemory()
{
struct task_vm_info info;
mach_msg_type_number_t size = TASK_VM_INFO_COUNT;
kern_return_t kerr = task_info(mach_task_self(), TASK_VM_INFO, (task_info_t)&info, &size);
if (kerr == KERN_SUCCESS)
{
return info.phys_footprint; // 実メモリ使用量(バイト単位)
}
else
{
return 0;
}
}
}
ポイント
- task_info()を使って、物理メモリフットプリントを取得
- 単位はバイト(B)なので、後でMBやGBに換算して表示します
Unity側C#スクリプトを書く
これで、MemoryUsagePlugin.UsedMemoryMB
を読むだけで、現在のiOSメモリ使用量(MB単位)が取得できるようになります!
using System.Runtime.InteropServices;
using UnityEngine;
public static class MemoryUsagePlugin
{
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
private static extern ulong GetUsedMemory();
#else
private static ulong GetUsedMemory() => 0;
#endif
/// <summary>
/// 使用中メモリ(MB単位)
/// </summary>
public static float UsedMemoryMB => GetUsedMemory() / (1024f * 1024f);
}
使用例(メモリ使用量を表示する)
例えば、ゲーム中にメモリ量をモニタリングしたいなら:
using UnityEngine;
using UnityEngine.UI;
public class MemoryMonitor : MonoBehaviour
{
public Text memoryText;
void Update()
{
float usedMB = MemoryUsagePlugin.UsedMemoryMB;
memoryText.text = $"Memory Usage: {usedMB:F1} MB";
}
}
これだけで、リアルタイムにiOS実メモリ使用量を監視できます!
メモリ監視を活用したアプリ安定化アイデア
- 使用メモリが一定量(例:500MB)を超えたら警告メッセージ表示
- メモリ使用量が高いときに自動的にキャッシュ削除や不要なリソース解放
- ローディング画面などで一時的にメモリを測って最適化チューニング
特にiOSでは、メモリが750〜800MBを超えるとアプリクラッシュ(OSによる強制終了)のリスクが高まるため、
メモリ使用量をリアルタイムで管理できることは非常に重要です!
まとめ
項目 | 内容 |
---|---|
Unity標準APIは内部メモリのみ取得できる | |
iOSネイティブ(mach API)で物理メモリ使用量を取得可能 | |
コピペOKプラグイン+Unityスクリプトで簡単監視 | |
メモリ監視はアプリ安定化・クラッシュ防止に直結する |
リアルなiOSメモリ使用量を把握できるUnityアプリにして、
より高品質なゲーム・ツールを開発していきましょう!