Unity3D研究院编辑器之脚本获取资源内存和硬盘大小

时间:2024-06-21 15:35:14

内存

使用Profiler可以查看某个资源的内存占用情况,但是必须启动游戏,并且待查看的资源已经载入游戏中。我希望的是不启动游戏,也能看到它的内存好做统计。

硬盘

由于unity中的资源压缩格式记录在meta中所以,在文件夹中看到的资源大小是不正确的。打开unity需要选择一个资源,比如Texture、然后在右侧Inspector面板最下面可以看见它真实的硬盘占用。这个数据我也希望那个可以脚本取到,这样我好做统计工具。

在Project视图中先选择一个Texture  然后点击menuitem (“1/1”)即可

C#

1
2
3
4
5
6
7
8
9
10
    [MenuItem("1/1")]
    public static void menu()
    {
        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)));
        Debug.Log("硬盘占用:"+EditorUtility.FormatBytes((int)methodInfo.Invoke(null,new object[]{target})));
    }

内存的话unity提供了API Profiler.GetRuntimMemorySize。

硬盘的话unity没有提供,我查看了它的源码需要通过反射可以获取到。如果你还想查看别的资源的硬盘占用,自行查看一下他editor下的代码,用上面这样的代码反射获取出来即可。

Unity3D研究院编辑器之脚本获取资源内存和硬盘大小