コード例 #1
0
    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;
                    }
                }
            }
        }
    }
コード例 #2
0
    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);
    }
コード例 #3
0
 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);
     }
 }
コード例 #4
0
    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;
        }
    }
コード例 #5
0
    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();
            }
        }
    }