Unity 检查图片资源

using UnityEditor;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System;
using System.Reflection;

public class EditorTool : Editor
{
    [MenuItem("Tools/Resource/SearchWarningResource")]
    public static void SearchResource()
    {
        string path = Application.dataPath;
        string[] dirs = Directory.GetDirectories(path);
        SearchFile(dirs);
    }

    static public void SearchFile(string[] path)
    {
        foreach (string item in path)
        {
            string[] getFile = Directory.GetFiles(item);
            foreach (string file in getFile)
            {
                FileInfo fileInfo = new FileInfo(file);
                if (fileInfo.Extension.Equals(".png", StringComparison.CurrentCultureIgnoreCase) || fileInfo.Extension.Equals(".jpg", StringComparison.CurrentCultureIgnoreCase))
                {
                    string _file = file.Replace("\\", "/");
                    _file = _file.Substring(_file.IndexOf("Assets"));
                    TextureImporter textureImporter = AssetImporter.GetAtPath(_file) as TextureImporter;
                    if (textureImporter == null)
                        return;
                    AssetDatabase.ImportAsset(_file);
                    object[] args = new object[2] { 0, 0 };
                    MethodInfo mi = typeof(TextureImporter).GetMethod("GetWidthAndHeight", BindingFlags.NonPublic | BindingFlags.Instance);
                    mi.Invoke(textureImporter, args);
                    int width = (int)args[0];
                    int height = (int)args[1];
                    if (width > 2048)
                    {
                        Texture2D texture = AssetDatabase.LoadAssetAtPath<Texture2D>(_file);
                        long size = GetTextureFileSize(texture, _file);
                        //long ySize = GetTextureRuntimeMemorySize(texture);
                        Debug.LogError(string.Format("警告,width:{0},height:{1},占用内存:{2}M,图片资源{3}", width, height, size / 1048576,  fileInfo.FullName));
                    }
                    else if (height > 2048)
                    {
                        Texture2D texture = AssetDatabase.LoadAssetAtPath<Texture2D>(_file);
                        long size = GetTextureFileSize(texture, _file);
                        //long ySize = GetTextureRuntimeMemorySize(texture);
                        Debug.LogError(string.Format("警告,width:{0},height:{1},占用内存:{2}M,图片资源{3}", width, height, size / 1048576,  fileInfo.FullName));
                    }
                }
            }
            string[] getFoder = Directory.GetDirectories(item);
            SearchFile(getFoder);
        }
    }

    public static long GetTextureFileSize(Texture2D texture, string _file)
    {
        try
        {
            long fileSize = 0;

            // 使用反射获取UnityEditor.TextureUtil类的Type
            Type textureUtilType = typeof(TextureImporter).Assembly.GetType("UnityEditor.TextureUtil");

            // 使用反射获取UnityEditor.TextureUtil类的GetStorageMemorySizeLong方法
            MethodInfo getStorageMemorySizeLongMethod = textureUtilType.GetMethod("GetStorageMemorySizeLong", BindingFlags.Static | BindingFlags.Public);

            // 调用GetStorageMemorySizeLong方法获取存储内存大小
            fileSize = (long)getStorageMemorySizeLongMethod.Invoke(null, new object[] { texture });

            return fileSize;
        }
        catch (Exception e)
        {
            Debug.LogError("GetTextureFileSize error:" + _file);
            return 0;
        }

    }

    public static long GetTextureRuntimeMemorySize(Texture2D texture)
    {
        try
        {
            long memorySize;

            // 使用反射获取UnityEditor.TextureUtil类的Type
            Type textureUtilType = typeof(TextureImporter).Assembly.GetType("UnityEditor.TextureUtil");

            // 使用反射获取UnityEditor.TextureUtil类的GetRuntimeMemorySizeLong方法
            MethodInfo getRuntimeMemorySizeLongMethod = textureUtilType.GetMethod("GetRuntimeMemorySizeLong", BindingFlags.Static | BindingFlags.Public);

            // 调用GetRuntimeMemorySizeLong方法获取运行时内存大小
            memorySize = (long)getRuntimeMemorySizeLongMethod.Invoke(null, new object[] { texture });

            return memorySize;
        }
        catch (Exception e)
        {
            Debug.LogError("GetTextureRuntimeMemorySize error:" + e);
            return 0;
        }
    }

}
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值