Unity3D 🌻获取资源运行时内存和硬盘大小
🌻内存
使用Profiler可以查看某个资源的内存占用情况,但是必须启动游戏,并且待查看的资源已经载入游戏中。我希望的是不启动游戏,也能看到它的内存好做统计。
🌻硬盘
由于unity中的资源压缩格式记录在meta中所以,在文件夹中看到的资源大小是不正确的。打开unity需要选择一个资源,比如Texture、然后在右侧Inspector面板最下面可以看见它真实的硬盘占用。这个数据我也希望那个可以脚本取到,这样我好做统计工具。
在Project视图中先选择一个Texture 然后点击Hang77 Tools/Check Texture Size即可。
没有选中图片:
有选中但是选择的不是Texture:
实际运行:
内存的话unity提供了API Profiler.GetRuntimMemorySize。
硬盘的话unity没有提供,我查看了它的源码需要通过反射可以获取到。如果你还想查看别的资源的硬盘占用,自行查看一下他editor下的代码,用上面这样的代码反射获取出来即可。
[MenuItem("Hang77 Tools/Check Texture Size")]public static void CheckTextureSize(){if (Selection.activeObject==null){UnityEngine.Debug.LogError("请选中需要检测内存的图片!"); return;}Texture target = Selection.activeObject as Texture;var type = Types.GetType("UnityEditor.TextureUtil", "UnityEditor.dll");MethodInfo methodInfo = type.GetMethod("GetStorageMemorySize", BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public);Debug.Log("内存占用:" + EditorUtility.FormatBytes(Profiler.GetRuntimeMemorySize(Selection.activeObject)));if (target == null){UnityEngine.Debug.LogError("选中的不是图片!!!"); return;}Debug.Log("硬盘占用:" + EditorUtility.FormatBytes((int)methodInfo.Invoke(null, new object[] { target })));}
参考链接:https://www.xuanyusong.com/archives/4263