internal void AddPrefabs(List <string> usedPrefabsInScenes) { foreach (string path in usedPrefabsInScenes) { EditorUtility.DisplayProgressBar( "Adding prefabs", "Analyzing scenes to get prefabs", (float)usedPrefabsInScenes.IndexOf(path) / (float)usedPrefabsInScenes.Count); //Early out if (m_BuildSizeList.Exists(val => val.Path == path)) { continue; } UnityEngine.Object obj = UnityEditor.AssetDatabase.LoadAssetAtPath(path, typeof(UnityEngine.Object)); if (obj != null) { BuildReportAsset newAsset = new BuildReportAsset(); newAsset.SetAssetInfo(obj, path); //newAsset.SetSize(0.0f, "--"); m_BuildSizeList.Add(newAsset); } else { Debug.LogWarning(path + " is not a valid asset"); } } EditorUtility.ClearProgressBar(); }
internal void AddPlatformSpecificAssets() { int counter = 0; int countTo = Enum.GetValues(typeof(BuildTargetGroup)).Length; //TODO Get all the different splash screens and config files somehow List <UnityEngine.Object> splash = new List <UnityEngine.Object>(); #if UNITY_5_5_OR_NEWER //Dont add splashscreen in this version #else splash.Add(UnityEditor.PlayerSettings.xboxSplashScreen); #endif //Loop the entries foreach (UnityEngine.Object obj in splash) { //Early out if it already exist if (obj == null || m_BuildSizeList.Exists(val => val.Path == AssetDatabase.GetAssetPath(obj))) { continue; } BuildReportAsset newAsset = new BuildReportAsset(); newAsset.SetAssetInfo(obj, AssetDatabase.GetAssetPath(obj)); //newAsset.SetSize(0.0f, "--"); m_BuildSizeList.Add(newAsset); } //Loop icons in buildtargetgroups foreach (BuildTargetGroup btg in (BuildTargetGroup[])Enum.GetValues(typeof(BuildTargetGroup))) { EditorUtility.DisplayProgressBar( "Add Target Specifics for " + btg.ToString(), "Looking at icons and splash screens for targetgroups", (float)counter / (float)countTo); Texture2D[] buildTargetGroupTextures = UnityEditor.PlayerSettings.GetIconsForTargetGroup(btg); foreach (Texture2D curIcon in buildTargetGroupTextures) { //Early out if it already exist if (curIcon == null || m_BuildSizeList.Exists(val => val.Path == AssetDatabase.GetAssetPath(curIcon))) { continue; } BuildReportAsset newAsset = new BuildReportAsset(); newAsset.SetAssetInfo(curIcon, AssetDatabase.GetAssetPath(curIcon)); //newAsset.SetSize(0.0f, "--"); m_BuildSizeList.Add(newAsset); } AHHelper.UnloadUnused(); } EditorUtility.ClearProgressBar(); }
internal static AHBuildReport AnalyzeBuildLog() { AHBuildReport buildReport = new AHBuildReport(); 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); 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(); return(buildReport); }