您的位置:首页 > 移动开发 > Unity3D

检测prefab身上关联的shader

2015-12-12 16:13 363 查看
public static void GetShaderInfo()
{
UnityEngine.Object[] arr = Selection.GetFiltered(typeof(UnityEngine.Object), SelectionMode.TopLevel);
if (arr.Length <= 0)
{
Logger.Instance.LogError("请选择Project->右部分的目录!");
return;
}

Dictionary<string, List<string>> shaderDic = new Dictionary<string, List<string>>();
string pathChoosen = Application.dataPath.Substring(0, Application.dataPath.LastIndexOf("Assets")) + AssetDatabase.GetAssetPath(arr[0]);
Logger.Instance.Log(pathChoosen);
//string[] relativePaths = MyDirectory.GetWholeFilesPathFromDirectory(pathChoosen);

UnityEngine.Object[] selection = Selection.GetFiltered(typeof(UnityEngine.Object), SelectionMode.DeepAssets);
string[] relativePaths = (from s in selection let relativePath = AssetDatabase.GetAssetPath(s) where File.Exists(relativePath) select relativePath).ToArray();

foreach (UnityEngine.Object obj in selection)
{
string path = obj.name;
//string[] list = AssetDatabase.GetDependencies(new string[] { path });//获取指定路径预设的依赖所有资源列表
UnityEngine.Object[] list = EditorUtility.CollectDependencies(new UnityEngine.Object[] { obj });
if (list == null || list.Length == 0)
continue;
for (int index = 0; index < list.Length; index++)
{
UnityEngine.Object target = list[index];
if (target == null)
{
continue;
}
string pathName = target.name;
//string fileName = pathName.Substring(pathName.LastIndexOf('/')+1);
//string extensionName = fileName.Substring(fileName.LastIndexOf('.'));
if (list[index] is Shader)
{
if (pathName.StartsWith("Particles/"))
{
if (shaderDic.ContainsKey(pathName))
{
shaderDic[pathName].Add(path);
}
else
{
List<string> tempist = new List<string>();
shaderDic.Add(pathName, tempist);
shaderDic[pathName].Add(path);
}
}
}
}
}

foreach (string key in shaderDic.Keys)
{
List<string> list = shaderDic[key];
if (list.Count >= 1)
{
string url = Application.persistentDataPath + "/shader.txt";
FileIO.SaveTextFile(url, "shader =" + key + "<----------------------------");

foreach (string value in list)
{
FileIO.SaveTextFile(url,key +"----------"+ value);
}
}
}

}


项目中做热更的时候,发现有一些特效身上用的shader是Particle/开头的,而不是 Mobie/Particle开头的,要检测出具体哪些属于这种情况,做了个检测的方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity