37 lines
1.4 KiB
C#
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());
|
|
}
|
|
} |