检测prefab身上关联的shader

来源:互联网 发布:网络黑凤梨有关论文 编辑:程序博客网 时间:2024/04/30 07:22
  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开头的,要检测出具体哪些属于这种情况,做了个检测的方法。

0 0
原创粉丝点击