public void FindChildPrefab(UIPrefabInfo path, List <UIPrefabInfo> unUseInfodic, List <UIPrefabInfo> removeInUnUseList) { string allText = File.ReadAllText(path.prefabPath); //v2.0 if (prefabRegex.IsMatch(allText)) { MatchCollection collection = prefabRegex.Matches(allText); foreach (Match item in collection) { string prefabPath = item.Value; for (int i = 0; i < unUseInfodic.Count; i++) { if (prefabPath.Contains(unUseInfodic[i].prefabSimplePath) || prefabPath.Contains(unUseInfodic[i].guid)) { //unUseInfodic.Remove(unUseInfodic[i]); if (!path.prefabPoolList.Contains(unUseInfodic[i])) { path.prefabPoolList.Add(unUseInfodic[i]); removeInUnUseList.Add(unUseInfodic[i]); } FindChildPrefab(unUseInfodic[i], unUseInfodic, removeInUnUseList); break; } } } } }
private UIPrefabInfo GetPrefabAtlasInfo(string name) { UIPrefabInfo info = new UIPrefabInfo(); info.prefabName = name; info.prefabPath = _uiPrefabPath + name; string[] _referenceList = AssetDatabase.GetDependencies(info.prefabPath, true); for (int i = 0; i < _referenceList.Length; ++i) { string _ext = Path.GetExtension(_referenceList[i]); if (_png.Equals(_ext)) { TextureImporter imp = AssetImporter.GetAtPath(_referenceList[i]) as TextureImporter; string packTag = ParseAtlasName(imp.spritePackingTag); if (invalidName.Equals(packTag) && !info.noAtlas.Contains(_referenceList[i])) { info.noAtlas.Add(_referenceList[i]); } else { if (!info.atlass.ContainsKey(packTag)) { info.atlass[packTag] = new List <string>(); } info.atlass[packTag].Add(_referenceList[i]); } } else if (_jpg.Equals(_ext) || _tga.Equals(_ext)) { if (!info.textures.Contains(_referenceList[i])) { info.textures.Add(_referenceList[i]); } } else if (_ttf.Equals(_ext)) { if (!info.fonts.Contains(_referenceList[i])) { info.fonts.Add(_referenceList[i]); } } else { if (!info.others.Contains(_referenceList[i])) { info.others.Add(_referenceList[i]); } } } return(info); }
public void AddPrefabChildContent(List <string> content, UIPrefabInfo item, int level) { foreach (var childItem in item.prefabPoolList) { string preContent = ""; for (int i = 0; i < level; i++) { preContent += " "; } content.Add(preContent + childItem.prefabPath); AddPrefabChildContent(content, childItem, level + 1); } }
public void DoSomeThing() { switch (index) { case 0: //查找prefab { //string[] m_prefab_files = new string[] { "F:/p4_workspace/DGM/x5_mobile/mobile_dancer/trunk/client/Assets/resources/Art/UIPrefabs/General/SwitchScene.prefab", "F:/p4_workspace/DGM/x5_mobile/mobile_dancer/trunk/client/Assets/resources/Art/UIPrefabs/NewUI/PayNewYear/UIPayNewYearBubble.prefab" }; //string[] m_prefab_files = new string[] { "F:/p4_workspace/DGM/x5_mobile/mobile_dancer/trunk/client/Assets/resources/Art/UIPrefabs/NewUI/Arena/UIArenaEnter.prefab"}; string[] m_prefab_files = Directory.GetFiles(Application.dataPath + "/resources/Art/UIPrefabs", "*.prefab", SearchOption.AllDirectories); for (int i = 0; i < m_prefab_files.Length; i++) { bool ignore = false; for (int j = 0; j < m_filterPrefab.Count; j++) { if (m_prefab_files[i].Contains(m_filterPrefab[j])) { ignore = true; break; } } if (!ignore) { prefabConvertList.Add(m_prefab_files[i].Replace('\\', '/')); } } } break; case 1: //UIRegister find { string registPath = Application.dataPath + "/Scripts/Framework/Global/UIRegister.cs"; string hotRegistPath = Application.dataPath + "/Scripts/LSharpToCS/UIHotRegister.cs"; string registContent = File.ReadAllText(registPath); registContent += File.ReadAllText(hotRegistPath); registContent = registContent.ToLower(); foreach (var item in prefabConvertList) //查找被regist的界面. { UIPrefabInfo upi = new UIPrefabInfo(); upi.InitPrefabPath(item); upi.prefabName = System.IO.Path.GetFileNameWithoutExtension(item); string simplePath = upi.GetPrefabSimplePath(); if (registContent.Contains(simplePath + "\"")) { upi.prefabType = "registerUI"; prefabInfoList.Add(upi); } else { unUseInfodic.Add(upi); } } } break; case 2: //查找Register里面的UIPrefab的 Pool { List <UIPrefabInfo> removeInUnUseList = new List <UIPrefabInfo>(); //查找regist的界面中, 动态加载的界面. foreach (UIPrefabInfo item in prefabInfoList) { FindChildPrefab(item, unUseInfodic, removeInUnUseList); } for (int i = 0; i < removeInUnUseList.Count; i++) { if (unUseInfodic.Contains(removeInUnUseList[i])) { unUseInfodic.Remove(removeInUnUseList[i]); } } } break; case 3: //查找其他cs文件引用. { //Waring string[] m_prefab_files = Directory.GetFiles(Application.dataPath + "/Scripts", "*.cs", SearchOption.AllDirectories); List <string> cSharpList = new List <string>(); for (int i = 0; i < m_prefab_files.Length; i++) { if (m_prefab_files[i].EndsWith("UIRegister.cs") || m_prefab_files[i].EndsWith("UIHotRegister.cs")) { } else { cSharpList.Add(m_prefab_files[i].Replace('\\', '/')); } } foreach (var item in cSharpList) //查找被c#引用的界面. { string allText = File.ReadAllText(item); if (!string.IsNullOrEmpty(allText)) { for (int i = 0; i < unUseInfodic.Count; i++) { if (allText.Contains(unUseInfodic[i].prefabName + "\"")) { unUseInfodic[i].cShapUse.Add(item); cSharpUse.Add(unUseInfodic[i]); } } } } for (int i = 0; i < cSharpUse.Count; i++) { if (unUseInfodic.Contains(cSharpUse[i])) { unUseInfodic.Remove(cSharpUse[i]); } } } break; case 4: //查找c#里面的UIPrefab的 Pool { List <UIPrefabInfo> removeInUnUseList = new List <UIPrefabInfo>(); //查找regist的界面中, 动态加载的界面. foreach (UIPrefabInfo item in cSharpUse) { FindChildPrefab(item, unUseInfodic, removeInUnUseList); } for (int i = 0; i < removeInUnUseList.Count; i++) { if (unUseInfodic.Contains(removeInUnUseList[i])) { unUseInfodic.Remove(removeInUnUseList[i]); } } } break; default: //写文件 { List <string> content = new List <string>(); content.Add("not used:"); foreach (var item in unUseInfodic) { content.Add(item.prefabSimplePath); } content.Add(""); content.Add("c# waring:"); foreach (var item in cSharpUse) { content.Add(item.prefabPath); for (int i = 0; i < item.cShapUse.Count; i++) { content.Add(" " + item.cShapUse[i]); } } content.Add(""); content.Add("被UIRegister注册的UI:"); foreach (UIPrefabInfo item in prefabInfoList) { content.Add(item.prefabPath); if (item.prefabPoolList.Count > 0) { content.Add("prefabPool加载出来的界面"); AddPrefabChildContent(content, item, 1); } content.Add(""); } ResourceUsageCheck.WriteOnly(GetMyType(), content); } break; } }
private void ShowPrefabInfo(UIPrefabInfo info) { EditorGUILayout.BeginHorizontal(GUI.skin.box); info.isSel = EditorGUILayout.ToggleLeft(info.prefabName, info.isSel, GUILayout.Width(200)); EditorGUILayout.LabelField(info.atlass.Count.ToString(), GUILayout.Width(50)); EditorGUILayout.LabelField(info.noAtlas.Count.ToString(), GUILayout.Width(50)); EditorGUILayout.LabelField(info.textures.Count.ToString(), GUILayout.Width(50)); EditorGUILayout.LabelField(info.fonts.Count.ToString(), GUILayout.Width(50)); info.isShowDetail = EditorGUILayout.Foldout(info.isShowDetail, "显示详情"); EditorGUILayout.EndHorizontal(); if (info.isShowDetail) { if (info.atlass.Count > 0) { EditorGUILayout.LabelField("图集详情"); EditorGUILayout.BeginVertical(GUI.skin.box); foreach (string k in info.atlass.Keys) { EditorGUILayout.LabelField(k); EditorGUILayout.BeginVertical(GUI.skin.box); List <string> ns = info.atlass[k]; for (int i = 0; i < ns.Count; ++i) { if (GUILayout.Button(ns[i])) { Object _object = AssetDatabase.LoadAssetAtPath(ns[i], typeof(Object)); EditorGUIUtility.PingObject(_object); } //EditorGUILayout.LabelField(ns[i]); } EditorGUILayout.EndVertical(); } EditorGUILayout.EndVertical(); } if (info.noAtlas.Count > 0) { EditorGUILayout.LabelField("未设置图集精灵"); EditorGUILayout.BeginVertical(GUI.skin.box); GUI.color = Color.red; for (int i = 0; i < info.noAtlas.Count; ++i) { if (GUILayout.Button(info.noAtlas[i])) { Object _object = AssetDatabase.LoadAssetAtPath(info.noAtlas[i], typeof(Object)); EditorGUIUtility.PingObject(_object); } //EditorGUILayout.LabelField(info.noAtlas[i]); } GUI.color = Color.white; EditorGUILayout.EndVertical(); } if (info.textures.Count > 0) { EditorGUILayout.LabelField("纹理详情"); EditorGUILayout.BeginVertical(GUI.skin.box); for (int i = 0; i < info.textures.Count; ++i) { if (GUILayout.Button(info.textures[i])) { Object _object = AssetDatabase.LoadAssetAtPath(info.textures[i], typeof(Object)); EditorGUIUtility.PingObject(_object); } //EditorGUILayout.LabelField(info.textures[i]); } EditorGUILayout.EndVertical(); } if (info.fonts.Count > 0) { EditorGUILayout.LabelField("字集引用"); EditorGUILayout.BeginVertical(GUI.skin.box); for (int i = 0; i < info.fonts.Count; ++i) { EditorGUILayout.LabelField(info.fonts[i]); } EditorGUILayout.EndVertical(); } if (info.others.Count > 0) { EditorGUILayout.LabelField("其他引用"); EditorGUILayout.BeginVertical(GUI.skin.box); for (int i = 0; i < info.others.Count; ++i) { if (GUILayout.Button(info.others[i])) { Object _object = AssetDatabase.LoadAssetAtPath(info.others[i], typeof(Object)); EditorGUIUtility.PingObject(_object); } //EditorGUILayout.LabelField(info.others[i]); } EditorGUILayout.EndVertical(); } } }