using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEngine.Rendering;
using System;
using System.IO;
using System.Linq;
using System.Reflection;
namespace LFramework
{
public class ComonABEditor : Editor
{
private ShaderVariantCollection svc;
readonly public static string ALL_SHADER_VARAINT_PATH = "Assets/Sources/Common/AllShaders.shadervariants";
readonly public static string Tools_SVC_PATH = "Assets/Sources/Common/Tools.shadervariants";
#region FindMaterial
static List<string> allShaderPathList = new List<string>();
static List<string> allMaterialPathList = new List<string>();
public static void GenShaderVariant()
{
allShaderPathList.Clear();
//先搜集所有keyword到工具类SVC
toolSVC = new ShaderVariantCollection();
var shaders = GetAllShaders();
foreach (var shader in shaders)
{
ShaderVariantCollection.ShaderVariant sv = new ShaderVariantCollection.ShaderVariant();
var shaderPath = AssetDatabase.GUIDToAssetPath(shader);
sv.shader = AssetDatabase.LoadAssetAtPath<Shader>(shaderPath);
toolSVC.Add(sv);
//
allShaderPathList.Add(shaderPath);
}
//放空
FileHelper.WriteAllText(Tools_SVC_PATH, "");
AssetDatabase.DeleteAsset(Tools_SVC_PATH);
AssetDatabase.CreateAsset(toolSVC, Tools_SVC_PATH);
//搜索所有Mat
var assets = GetAllPrefabs();
List<string> allMats = new List<string>();
//GUID to assetPath
for (int i = 0; i < assets.Count; i++)
{
var p = AssetDatabase.GUIDToAssetPath(assets[i]);
//获取依赖中的mat
var dependenciesPath = AssetDatabase.GetDependencies(p, true);
var mats = dependenciesPath.ToList().FindAll((dp) => dp.EndsWith(".mat"));
allMats.AddRange(mats);
}
//处理所有的 material
allMats = allMats.Distinct().ToList();
float count = 1;
foreach (var mat in allMats)
{
var obj = AssetDatabase.LoadMainAssetAtPath(mat);
if (obj is Material)
{
var _mat = obj as Material;
EditorUtility.DisplayProgressBar("处理mat", string.Format("处理:{0} - {1}", Path.GetFileName(mat), _mat.shader.name), count / allMats.Count);
AddToDict(_mat);
}
count++;
}
EditorUtility.ClearProgressBar();
//所有的svc
ShaderVariantCollection svc = new ShaderVariantCollection();
foreach (var item in ShaderVariantDict)
{
foreach (var _sv in item.Value)
{
svc.Add(_sv);
}
}
AssetDatabase.DeleteAsset(ALL_SHADER_VARAINT_PATH);
AssetDatabase.CreateAsset(svc, ALL_SHADER_VARAINT_PATH);
AssetDatabase.Refresh();
}
public class ShaderData
{
public int[] PassTypes = new int[] {
};
public string[][] KeyWords =
Unity收集shadervariants(shader变体,BDFramework框架内容),获取依赖文件,设置ab
于 2021-11-19 10:52:56 首次发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)