概要
例えば、上記のように3個のテクスチャを描画するシーンを Android にビルドして
using System.Linq; using System.Text; using TMPro; using UnityEngine; using UnityEngine.Profiling; public class Example : MonoBehaviour { public TMP_Text m_text; private void Start() { var list = Resources .FindObjectsOfTypeAll<Texture2D>() .Where( c => ( c.hideFlags & HideFlags.NotEditable ) == 0 ) .Where( c => ( c.hideFlags & HideFlags.HideAndDontSave ) == 0 ) .ToArray() ; var sb = new StringBuilder(); foreach ( var n in list ) { var memory = Profiler.GetRuntimeMemorySizeLong( n ); var mb = ( memory >> 10 ) / 1024f; sb.AppendLine( $"{n.name}: {mb.ToString( "0.00" )} MB" ); } var text = sb.ToString(); m_text.text = text; } }
Resources.FindObjectsOfTypeAll で現在読み込まれているすべてのテクスチャを取得し、
Profiler.GetRuntimeMemorySizeLong でそれぞれのテクスチャの
メモリ使用量を取得して画面に描画してみると
このように、それぞれのテクスチャが 0.37 MB のメモリを使用していることがわかります
(「Emoji One」と「LiberationSans SDF Atlas」は TextMesh Pro が使用している画像)
Unity エディタの Inspector でテクスチャの容量を見てみると
おおむね一致していることがわかります(0.382 MB)
Profiler を見てもテクスチャの容量がほぼ同じであることがわかります
このように Profiler.GetRuntimeMemorySizeLong を使用することで
指定した Unity のオブジェクトやアセットのメモリ使用量を取得できます