Example #1
0
    private void showBuildAssetInfoUI()
    {
        EditorGUILayout.BeginVertical();
        EditorGUI.indentLevel = 0;

        GUILayout.Label("--------------------------------LEGEND--------------------------------");

        EditorGUILayout.BeginHorizontal();
        GUILayout.Space(20);
        GUILayout.Label(m_UISceneSelect, GUILayout.Width(25), GUILayout.Height(25));
        GUILayout.Label("Select all scenes that reference this asset: ", GUILayout.Width(300));
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal();
        GUILayout.Space(20);
        GUILayout.Label(m_UIFolderSelect, GUILayout.Width(25), GUILayout.Height(25));
        GUILayout.Label("Locate asset in project view: ", GUILayout.Width(300));
        EditorGUILayout.EndHorizontal();

        GUILayout.Label("-------------------------------------------------------------------------");

        GUILayout.Space(15);
        EditorGUILayout.LabelField("Assets included in build", EditorStyles.boldLabel);

        EditorGUI.indentLevel = 1;
        for (int i = 0; i < m_BuildLog.AssetCount; i++)
        {
            if (m_usedTypeDict[m_BuildLog.GetAssetAtIndex(i).Type] == true)
            {
                BuildReportAsset asset = m_BuildLog.GetAssetAtIndex(i);
                EditorGUILayout.BeginHorizontal();

                GUILayout.Space(10);
                if (GUILayout.Button(m_UISceneSelect, GUIStyle.none, GUILayout.Width(btnImageSize), GUILayout.Height(btnImageSize)))
                {
                    //Toggle if we should show scene dependency
                    asset.ToggleShowSceneDependency();

                    if (m_assetSceneDependencies.ContainsKey(asset.Path))
                    {
                        List <string> scenes = m_assetSceneDependencies[asset.Path];

                        UnityEngine.Object[] selectedObjects = new Object[scenes.Count];

                        for (int j = 0; j < scenes.Count; j++)
                        {
                            selectedObjects[j] = AssetDatabase.LoadAssetAtPath(scenes[j], typeof(UnityEngine.Object));
                        }

                        Selection.activeObject = null;
                        Selection.objects      = selectedObjects;
                        asset.SetSceneDependencies(selectedObjects);
                    }
                }
                GUILayout.Space(10);

                if (GUILayout.Button(m_UIFolderSelect, GUIStyle.none, GUILayout.Width(btnImageSize), GUILayout.Height(btnImageSize)))
                {
                    Selection.activeObject = AssetDatabase.LoadAssetAtPath(asset.Path, asset.Type.SystemType);
                    EditorGUIUtility.PingObject(Selection.activeObject);
                }

                EditorGUILayout.LabelField(asset.Name, GUILayout.Width(350));

                EditorGUILayout.LabelField(asset.Size + " " + asset.SizePostFix, GUILayout.Width(75));
                GUILayout.Label(EditorGUIUtility.ObjectContent(null, asset.Type.SystemType).image, GUILayout.Width(btnImageSize), GUILayout.Height(btnImageSize));
                GUILayout.FlexibleSpace();
                EditorGUILayout.EndHorizontal();

                if (asset.ShouldShowDependencies)
                {
                    EditorGUI.indentLevel = 2;
                    //If the asset is actually reference in scenes
                    if (asset.GetSceneDependencies() != null && asset.GetSceneDependencies().Length >= 1)
                    {
                        asset.FoldOut = EditorGUILayout.Foldout(asset.FoldOut, "View scenes with dependency");
                        if (asset.FoldOut)
                        {
                            foreach (Object obj in asset.GetSceneDependencies())
                            {
                                if (obj != null)
                                {
                                    EditorGUILayout.ObjectField(obj, typeof(Object), false);
                                }
                            }
                        }
                    }
                    //If no scenes reference the asset
                    else
                    {
                        Color initialColor = GUI.color;
                        GUI.color = Color.red;
                        EditorGUILayout.LabelField("Asset not referenced in any scene, most likely a part of the \"resources\" foldes", EditorStyles.whiteLabel);
                        GUI.color = initialColor;
                    }
                }
                EditorGUI.indentLevel = 1;
            }
        }

        GUILayout.FlexibleSpace();
        EditorGUILayout.EndVertical();
    }
        internal static AssetBuildReport AnalyzeBuildLog()
        {
            AssetBuildReport buildReport = new AssetBuildReport();
            string UnityEditorLogfile = GetLogFolderPath();

            try
            {
                // Have to use FileStream to get around sharing violations!
                FileStream FS = new FileStream(UnityEditorLogfile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                StreamReader SR = new StreamReader(FS);

                string line;
                int linesRead = 0;
                int lineIndex = 0;

                while (!SR.EndOfStream)
                {
                    line = SR.ReadLine();
                    linesRead++;
                    if ((line).Contains("Mono dependencies included in the build"))
                    {
                        lineIndex = linesRead;
                    }
                }

                FS.Position = 0;
                SR.DiscardBufferedData();

                //Start reading from log at the right line
                for (int i = 0; i < lineIndex - 1; i++)
                {

                    SR.ReadLine();
                }

                while (!SR.EndOfStream && !(line = SR.ReadLine()).Contains("Mono dependencies included in the build")) ;
                while (!SR.EndOfStream && (line = SR.ReadLine()) != "")
                {
                    int stringLength = line.Length;
                    int startIndex = line.LastIndexOf(" ");
                    buildReport.AddDependency(line.Substring(startIndex, stringLength - startIndex));
                }
                while (!SR.EndOfStream && !(line = SR.ReadLine()).Contains("Used Assets")) ;
                bool assetAnalysisComplete = false;
                while (!SR.EndOfStream && !assetAnalysisComplete)
                {
                    string curLine = SR.ReadLine();

                    if (curLine == "" || curLine.Contains("System memory in use before") || !curLine.Contains("% "))
                    {
                        assetAnalysisComplete = true;
                    }
                    else
                    {
                        if (!curLine.Contains("Built-in"))
                        {
                            string str = curLine.Substring(curLine.IndexOf("% ") + 2);
                            if (str.StartsWith("assets/", true, null))
                            {
                                EditorUtility.DisplayProgressBar(
                                    "Parsing build log",
                                    "Parsing build log to retrieve info",
                                    (float)SR.BaseStream.Position / (float)SR.BaseStream.Length);

                                UnityEngine.Object obj = UnityEditor.AssetDatabase.LoadAssetAtPath(str, typeof(UnityEngine.Object));

                                if (obj != null)
                                {
                                    BuildReportAsset asset = new BuildReportAsset();

                                    asset.SetAssetInfo(obj, str);
                                    //Split on whitespace
                                    string[] splitstring = curLine.Split(null);
                                    asset.SetSize(float.Parse(splitstring[1]), splitstring[2]);
                                    buildReport.AddAsset(asset);
                                }
                                else
                                {
                                    Debug.Log(str + " does not seem to be a valid asset (Maybe its a \"terrain folder\"");
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception E)
            {
                Debug.LogError("Error: " + E);
            }
            EditorUtility.ClearProgressBar();

            //TODO FIND AND ADD ICONS FOR BUILDTARGETS AND CERTIFICATES AND WHATEVER ELSE
            return buildReport;
        }