Files
Main/Assets/Editor/DIY/Custom/ResCheckEditor.cs

241 lines
9.2 KiB
C#
Raw Permalink Normal View History

2025-01-25 04:38:09 +08:00
using UnityEngine;
using UnityEditor;
using System;
using Thousandto.Editor.Excel;
using System.Collections.Generic;
using System.IO;
using UnityEngine.Profiling;
public class ResCheckEditor
{
[MenuItem("Ares/检查所有图片资源并导出")]
static void ExportAllTextureInfo()
{
string excelPath = EditorUtility.SaveFilePanel("Export Excel", "", "", "xlsx");
if (string.IsNullOrEmpty(excelPath))
return;
NormalExcelInfo excelInfo = new NormalExcelInfo();
excelInfo.Name = "textureinfo";
var allTexture = AssetDatabase.FindAssets("t:Texture");
excelInfo.Values = new string[allTexture.Length + 1, 6];
excelInfo.Values[0, 0] = "path";
excelInfo.Values[0, 1] = "name";
excelInfo.Values[0, 2] = "mipmapEnabled";
excelInfo.Values[0, 3] = "isReadable";
excelInfo.Values[0, 4] = "size";
excelInfo.Values[0, 5] = "format";
for (int i = 0; i < allTexture.Length; ++i)
{
try
{
var path = AssetDatabase.GUIDToAssetPath(allTexture[i]);
TextureImporter im = TextureImporter.GetAtPath(path) as TextureImporter;
if (im != null)
{
excelInfo.Values[i + 1, 0] = path;
excelInfo.Values[i + 1, 1] = im.assetBundleName;
excelInfo.Values[i + 1, 2] = im.mipmapEnabled ? "true" : "false";
excelInfo.Values[i + 1, 3] = im.isReadable ? "true" : "false";
var readable = im.isReadable;
im.isReadable = true;
AssetDatabase.ImportAsset(path, ImportAssetOptions.ForceUpdate);
var tex = AssetDatabase.LoadAssetAtPath<Texture2D>(path);
if (tex != null)
{
var rowData = tex.GetRawTextureData<byte>();
excelInfo.Values[i + 1, 4] = rowData.Length.ToString();
excelInfo.Values[i + 1, 5] = tex.format.ToString();
im.isReadable = readable;
AssetDatabase.ImportAsset(path, ImportAssetOptions.ForceUpdate);
}
EditorUtility.DisplayProgressBar(string.Format("导出中 {0}/{1}", i, allTexture.Length), path, (float)i / allTexture.Length);
}
}
catch(Exception e)
{
}
}
ExcelWriter.Write(excelPath, excelInfo);
EditorUtility.ClearProgressBar();
}
[MenuItem("Ares/检查所有模型资源并导出")]
static void ExportAllMeshInfo()
{
string excelPath = EditorUtility.SaveFilePanel("Export Excel", "", "", "xlsx");
if (string.IsNullOrEmpty(excelPath))
return;
NormalExcelInfo excelInfo = new NormalExcelInfo();
excelInfo.Name = "meshinfo";
var allModel = AssetDatabase.FindAssets("t:Model");
var meshList = new List<Mesh>(allModel.Length * 2);
var pathList = new List<string>(allModel.Length * 2);
for (int i = 0; i < allModel.Length; ++i)
{
try
{
var path = AssetDatabase.GUIDToAssetPath(allModel[i]);
var assets = AssetDatabase.LoadAllAssetsAtPath(path);
if (assets != null)
{
for (int j = 0; j < assets.Length; ++j)
{
var mesh = assets[j] as Mesh;
if (mesh != null)
{
pathList.Add(path);
meshList.Add(mesh);
}
}
EditorUtility.DisplayProgressBar(string.Format("导出中 {0}/{1}", i, allModel.Length), path, (float)i / allModel.Length);
}
}
catch (Exception e)
{
}
}
excelInfo.Values = new string[meshList.Count + 1, 5];
excelInfo.Values[0, 0] = "path";
excelInfo.Values[0, 1] = "name";
excelInfo.Values[0, 2] = "verts";
excelInfo.Values[0, 3] = "tris";
excelInfo.Values[0, 4] = "uv";
for (int i = 0; i < meshList.Count; ++i)
{
var mesh = meshList[i];
excelInfo.Values[i + 1, 0] = pathList[i];
excelInfo.Values[i + 1, 1] = mesh.name;
excelInfo.Values[i + 1, 2] = mesh.vertexCount.ToString();
excelInfo.Values[i + 1, 3] = (mesh.triangles.LongLength / 3).ToString();
if (mesh.uv8 != null && mesh.uv8.Length > 0)
{
excelInfo.Values[i + 1, 4] = "8";
}
else if(mesh.uv7 != null && mesh.uv7.Length > 0)
{
excelInfo.Values[i + 1, 4] = "7";
}
else if(mesh.uv6 != null && mesh.uv6.Length > 0)
{
excelInfo.Values[i + 1, 4] = "6";
}
else if(mesh.uv5 != null && mesh.uv5.Length > 0)
{
excelInfo.Values[i + 1, 4] = "5";
}
else if(mesh.uv4 != null && mesh.uv4.Length > 0)
{
excelInfo.Values[i + 1, 4] = "4";
}
else if(mesh.uv3 != null && mesh.uv3.Length > 0)
{
excelInfo.Values[i + 1, 4] = "3";
}
else if(mesh.uv2 != null && mesh.uv2.Length > 0)
{
excelInfo.Values[i + 1, 4] = "2";
}
else
{
excelInfo.Values[i + 1, 4] = "1";
}
}
ExcelWriter.Write(excelPath, excelInfo);
EditorUtility.ClearProgressBar();
}
[MenuItem("Ares/检查所有动作资源并导出")]
static void ExportAllAnimationInfo()
{
string excelPath = EditorUtility.SaveFilePanel("Export Excel", "", "", "xlsx");
if (string.IsNullOrEmpty(excelPath))
return;
NormalExcelInfo excelInfo = new NormalExcelInfo();
excelInfo.Name = "meshinfo";
var allModel = AssetDatabase.FindAssets("t:Model");
var allAnimation = AssetDatabase.FindAssets("t:AnimationClip");
var allCount = allModel.Length + allAnimation.Length;
var meshList = new List<AnimationClip>(allCount);
var pathList = new List<string>(allCount);
var fileNameList = new List<string>(allCount);
for (int i = 0; i < allModel.Length; ++i)
{
try
{
var path = AssetDatabase.GUIDToAssetPath(allModel[i]);
var assets = AssetDatabase.LoadAllAssetsAtPath(path);
if (assets != null)
{
var asset = AssetDatabase.LoadAssetAtPath<GameObject>(path);
for (int j = 0; j < assets.Length; ++j)
{
var clip = assets[j] as AnimationClip;
if (clip != null && !clip.name.StartsWith("__preview__"))
{
pathList.Add(path);
meshList.Add(clip);
fileNameList.Add(asset.name);
}
}
EditorUtility.DisplayProgressBar(string.Format("导出中 {0}/{1}", i, allCount), path, (float)i / allCount);
}
}
catch (Exception e)
{
}
}
for (int i = 0; i < allAnimation.Length; ++i)
{
try
{
var path = AssetDatabase.GUIDToAssetPath(allAnimation[i]);
var assets = AssetDatabase.LoadAllAssetsAtPath(path);
if (assets != null)
{
for (int j = 0; j < assets.Length; ++j)
{
var clip = assets[j] as AnimationClip;
if (clip != null)
{
pathList.Add(path);
meshList.Add(clip);
fileNameList.Add(clip.name);
}
}
EditorUtility.DisplayProgressBar(string.Format("导出中 {0}/{1}", i + allModel.Length, allCount), path, (float)(i + allModel.Length) / allCount);
}
}
catch (Exception e)
{
}
}
excelInfo.Values = new string[meshList.Count + 1, 6];
excelInfo.Values[0, 0] = "path";
excelInfo.Values[0, 1] = "file";
excelInfo.Values[0, 2] = "name";
excelInfo.Values[0, 3] = "fps";
excelInfo.Values[0, 4] = "length";
excelInfo.Values[0, 5] = "memsize";
for (int i = 0; i < meshList.Count; ++i)
{
var mesh = meshList[i];
excelInfo.Values[i + 1, 0] = pathList[i];
excelInfo.Values[i + 1, 1] = fileNameList[i];
excelInfo.Values[i + 1, 2] = mesh.name;
excelInfo.Values[i + 1, 3] = mesh.frameRate.ToString();
excelInfo.Values[i + 1, 4] = mesh.length.ToString();
excelInfo.Values[i + 1, 5] = Profiler.GetRuntimeMemorySizeLong(mesh).ToString();
}
ExcelWriter.Write(excelPath, excelInfo);
EditorUtility.ClearProgressBar();
}
}