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 object2 { 0, 0 };

MethodInfo mi = typeof(TextureImporter).GetMethod("GetWidthAndHeight", BindingFlags.NonPublic | BindingFlags.Instance);

mi.Invoke(textureImporter, args);

int width = (int)args0;

int height = (int)args1;

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;

}

}

}

相关推荐
LF男男5 小时前
IBuilder.cs 接口
unity
心之所向,自强不息5 小时前
# Unity MCP + Codex CLI 完整教程(Windows)
windows·unity·游戏引擎
KillJUMP6 小时前
GODOT SHADER关键函数
游戏引擎·godot
Oiiouui9 小时前
Godot(4.x): Python处理转换Excel为注入Json
游戏引擎·godot
追光者♂11 小时前
【测评系列3】CSDN AI数字营销实测体验官:测试 开源项目——Superpowers 游戏引擎从零开发实战指南
人工智能·深度学习·机器学习·typescript·开源·游戏引擎·superpowers
小拉达不是臭老鼠12 小时前
Unity数据持久化_Json
学习·unity
heimeiyingwang12 小时前
【架构实战】订单系统架构设计:电商核心系统的演进
unity·架构·系统架构
元气少女小圆丶12 小时前
SenseGlove Nova 2+Unity开发笔记3
笔记·unity·游戏引擎
Oiiouui12 小时前
Godot(4.x): 游戏管理器: Excel 动态依赖注入实现
游戏·游戏引擎·godot
WMX101212 小时前
Unity-shader学习记录
学习·unity·游戏引擎