Files
JJBB/Assets/Project/Script/Shader/Editor/ShaderUsageScan.cs
2024-08-23 15:49:34 +08:00

37 lines
1.4 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using UnityEditor;
using UnityEngine;
public class ShaderUsageScan
{
[MenuItem("Test/Scan Character Shaders")]
public static void ScanCharacterShaders()
{
var shaders = new [] { Shader.Find("Standard") };
foreach (var shader in shaders)
if (shader == null)
return;
var materials = (from assetPath in AssetDatabase.GetAllAssetPaths()
let extension = Path.GetExtension(assetPath)
where !string.IsNullOrEmpty(extension) && extension.Equals(".mat", StringComparison.OrdinalIgnoreCase)
select assetPath).ToArray();
var list = new List<MyTuple<string, string>>();
for (var i = 0; i < materials.Length; i++)
{
var material = AssetDatabase.LoadAssetAtPath<Material>(materials[i]);
if (material != null)
{
var shader = material.shader;
if (shader != null && shaders.Contain(shader))
{
list.Add(new MyTuple<string, string>(materials[i], Path.GetFileNameWithoutExtension(materials[i])));
}
}
}
list.Sort((a, b) => string.CompareOrdinal(a.second, b.second));
File.WriteAllLines(Application.dataPath + "/AllMaterials.txt", list.Select(a => a.first).ToArray());
}
}