Beispiel #1
0
        private int calcAssetsInChildren(AssetHunterProjectFolderInfo assetFolderInfo, SortedDictionary <AssetHunterSerializableSystemType, bool> validTypeList, out long folderFileSize)
        {
            assetFolderInfo.m_fileSize = assetFolderInfo.GetUnusedAssetSize();

            long childrenSizeAccumulated = 0;

            int value = 0;

            foreach (int indexer in assetFolderInfo.m_childFolderIndexers)
            {
                long childSize = 0;
                value += AssetHunterMainWindow.Instance.GetFolderList()[indexer].m_assetsInChildren = calcAssetsInChildren(AssetHunterMainWindow.Instance.GetFolderList()[indexer], validTypeList, out childSize);

                childrenSizeAccumulated += childSize;
            }

            List <AssetObjectInfo> assetInfoList = (assetFolderInfo.AssetList.Where(val => (validTypeList.ContainsKey(val.m_Type) && validTypeList[val.m_Type]) == true)).ToList <AssetObjectInfo>();

            assetFolderInfo.m_fileSizeString      = AssetHunterHelper.BytesToString(assetFolderInfo.m_fileSize);
            assetFolderInfo.m_fileSizeAccumulated = assetFolderInfo.m_fileSize + childrenSizeAccumulated;

            assetFolderInfo.m_fileSizeAccumulatedString = AssetHunterHelper.BytesToString(assetFolderInfo.m_fileSizeAccumulated);

            folderFileSize = assetFolderInfo.m_fileSizeAccumulated;

            return(value + assetInfoList.Count());
        }
        private void loadEditorLog()
        {
            m_newBuildReady = false;

            m_ProjectFolderList.Clear();
            m_BuildLog = AssetHunterHelper.AnalyzeBuildLog();

            if (m_BuildLog.IsEmpty())
            {
                m_BuildLogLoaded = false;
                return;
            }
            else
            {
                m_BuildLogLoaded = true;
            }


            List <string> usedPrefabsInScenes = AssetHunterReader.GetPrefabsFromSceneFiles(AssetHunterHelper.GetEnabledSceneNamesInBuild(), out m_assetSceneDependencies);

            m_BuildLog.AddPrefabs(usedPrefabsInScenes);
            m_BuildLog.AddPlatformSpecificAssets();
            m_BuildLog.SortUsed();

            AssetHunterHelper.PopulateUnusedList(m_BuildLog, m_unusedTypeDict);

            refreshUnusedAssets();
        }
        private long getImportedFileSize(string path)
        {
            if (!string.IsNullOrEmpty(path))
            {
                string guid = AssetDatabase.AssetPathToGUID(path);
                if (guid.Length < 2)
                {
                    //Debug.Log(assetPath + " has no guid? value is \"" + guid + "\"");
                    return(-1);
                }

                string assetImportedPath = System.IO.Path.GetFullPath(Application.dataPath + "../../Library/cache/" + guid.Substring(0, 2) + "/" + guid);

                if (File.Exists(assetImportedPath))
                {
                    return(AssetHunterHelper.GetActualFileSize(assetImportedPath));
                }
                else
                {
                    assetImportedPath = System.IO.Path.GetFullPath(Application.dataPath + "../../Library/metadata/" + guid.Substring(0, 2) + "/" + guid);
                    string addedResourcePath = System.IO.Path.GetFullPath(Application.dataPath + "../../Library/metadata/" + guid.Substring(0, 2) + "/" + guid + ".resource");

                    //The additional resource file (i.e. audioclips have a file + a resource file)
                    long resourceSize = File.Exists(assetImportedPath) ? AssetHunterHelper.GetActualFileSize(addedResourcePath) : 0;

                    if (File.Exists(assetImportedPath))
                    {
                        return(AssetHunterHelper.GetActualFileSize(assetImportedPath) + resourceSize);
                    }
                }
            }

            //Fallback return -1;
            return(-1);
        }
Beispiel #4
0
 private void GetSceneInfo()
 {
     m_allScenesInProject               = AssetHunterHelper.GetAllSceneNames().ToList <string>();
     m_allScenesInBuildSettings         = AssetHunterHelper.GetAllSceneNamesInBuild().ToList <string>();
     m_allEnabledScenesInBuildSettings  = AssetHunterHelper.GetEnabledSceneNamesInBuild().ToList <string>();
     m_allDisabledScenesInBuildSettings = SubtractSceneArrays(m_allScenesInBuildSettings, m_allEnabledScenesInBuildSettings);
     m_allUnreferencedScenes            = SubtractSceneArrays(m_allScenesInProject, m_allScenesInBuildSettings);
 }
Beispiel #5
0
        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);
                }
                AssetHunterHelper.UnloadUnused();
            }

            EditorUtility.ClearProgressBar();
        }
Beispiel #6
0
 public AssetObjectInfo(string path, AssetHunterSerializableSystemType type)
 {
     this.m_Path = path;
     string[] parts = path.Split('/');
     this.m_Name = parts[parts.Length - 1];
     this.m_Type = type;
     System.IO.FileInfo fileInfo = new System.IO.FileInfo(path);
     this.m_FileSize       = fileInfo.Length;
     this.m_FileSizeString = AssetHunterHelper.BytesToString(m_FileSize);
 }
Beispiel #7
0
        internal void SetAssetInfo(UnityEngine.Object obj, string path)
        {
            this.m_path = path;
            string[] parts = path.Split('/');
            this.m_name = parts[parts.Length - 1];

            m_assetGUID = UnityEditor.AssetDatabase.AssetPathToGUID(path);
            m_type      = new AssetHunterSerializableSystemType(obj.GetType());

            AssetHunterHelper.UnloadUnused();
        }
Beispiel #8
0
        private static AssetHunterMainWindow initializeWindow()
        {
            m_IntialGUIColor = GUI.color;

            m_window = EditorWindow.GetWindow <AssetHunterMainWindow>();
            m_window.Show();
            loadEditorResources();

            m_window.m_BuildLogExists = AssetHunterHelper.HasBuildLogAvaliable();

            return(m_window);
        }
Beispiel #9
0
        internal void SetAssetInfo(UnityEngine.Object obj, string path)
        {
            long fileSize = -1;

            fileSize = getImportedFileSize(path);

            m_assetActualSize = fileSize;
            //SetSize();
            m_assetSizeString = (m_assetActualSize != -1) ? SizeSuffix(m_assetActualSize, 1) : "NA";

            this.m_path = path;
            //string[] parts = path.Split('/');
            this.m_name = obj.name;// parts[parts.Length - 1];

            m_assetGUID = UnityEditor.AssetDatabase.AssetPathToGUID(path);
            m_type      = new AssetHunterSerializableSystemType(obj.GetType());

            AssetHunterHelper.UnloadUnused();
        }
Beispiel #10
0
        internal void SetAssetInfo(UnityEngine.Object obj, string path)
        {
            long fileSize;

#if UNITY_2017_1_OR_NEWER
            fileSize = Profiler.GetRuntimeMemorySizeLong(obj);
#else
            fileSize = Profiler.GetRuntimeMemorySize(obj);
#endif
            SetSize(fileSize);

            this.m_path = path;
            //string[] parts = path.Split('/');
            this.m_name = obj.name;// parts[parts.Length - 1];

            m_assetGUID = UnityEditor.AssetDatabase.AssetPathToGUID(path);
            m_type      = new AssetHunterSerializableSystemType(obj.GetType());

            AssetHunterHelper.UnloadUnused();
        }
        private void showDefaultBody()
        {
            EditorGUILayout.BeginVertical();

            //Draw excluded types foldout
            if (bShowExcludeFoldout)
            {
                GUILayout.Label("-------------------------------------------------------------------------");
                if (settings.HasDirectoryExcludes())
                {
                    GUI.color             = AssetHunterHelper.AH_BLUE;
                    EditorGUI.indentLevel = 1;
                    EditorGUILayout.LabelField("Excluded Directories", EditorStyles.whiteBoldLabel);
                    GUI.color             = m_IntialGUIColor;
                    EditorGUI.indentLevel = 2;
                    foreach (UnityEngine.Object obj in settings.m_DirectoryExcludes)
                    {
                        EditorGUILayout.LabelField(AssetDatabase.GetAssetPath(obj), EditorStyles.miniLabel);
                    }
                }
                if (settings.HasTypeExcludes())
                {
                    GUI.color             = AssetHunterHelper.AH_BLUE;
                    EditorGUI.indentLevel = 1;
                    EditorGUILayout.LabelField("Excluded Types", EditorStyles.whiteBoldLabel);
                    GUI.color             = m_IntialGUIColor;
                    EditorGUI.indentLevel = 2;
                    foreach (AssetHunterSerializableSystemType sType in settings.m_AssetTypeExcludes)
                    {
                        EditorGUILayout.LabelField(sType.Name);
                    }
                }
                if (settings.HasSubStringExcludes())
                {
                    GUI.color             = AssetHunterHelper.AH_BLUE;
                    EditorGUI.indentLevel = 1;
                    EditorGUILayout.LabelField("Excluded Strings", EditorStyles.whiteBoldLabel);
                    GUI.color             = m_IntialGUIColor;
                    EditorGUI.indentLevel = 2;
                    foreach (string substring in settings.m_AssetSubstringExcludes)
                    {
                        EditorGUILayout.LabelField(substring);
                    }
                }
                GUILayout.Label("-------------------------------------------------------------------------");
                GUILayout.Space(10);
            }

            //If there is no valid build log
            if (!m_BuildLogExists)
            {
                m_BuildLogExists = AssetHunterHelper.HasBuildLogAvaliable();

                if (!m_BuildLogExists)
                {
                    EditorGUILayout.BeginHorizontal();
                    GUILayout.Label(m_UIWarning);
                    GUILayout.Label("Asset Hunter needs a recent build in order to work", EditorStyles.boldLabel);
                    EditorGUILayout.EndHorizontal();

                    GUILayout.Label("Create a build (Ctrl+Shift+B)");

                    //requires unity 5 to work
                    if (GUILayout.Button("Open Build Settings"))
                    {
                        EditorWindow.GetWindow(Type.GetType("UnityEditor.BuildPlayerWindow,UnityEditor"));
                    }

                    GUILayout.FlexibleSpace();
                    return;
                }
            }

            string buildLogButtonText;

            EditorGUI.indentLevel = 0;
            EditorGUILayout.EndVertical();

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

            //If build log up to date
            if (!m_newBuildReady)
            {
                buildLogButtonText = m_BuildLogLoaded ? "Log updated (refresh)" : "Load Build Log (Required)";
                GUI.color          = m_BuildLogLoaded ? AssetHunterHelper.AH_GREEN : AssetHunterHelper.AH_RED;
            }

            //If build log outdated
            else
            {
                buildLogButtonText = "Log outdated(Refresh)";
                GUI.color          = AssetHunterHelper.AH_YELLOW1;
            }

            //Load the Editor build log
            if (GUILayout.Button(buildLogButtonText, GUILayout.Width(375)))
            {
                loadEditorLog();
                return;
            }
            //GUILayout.FlexibleSpace();
            EditorGUILayout.Space();

            GUILayout.Label("------------------------------Select Mode------------------------------");
            EditorGUILayout.BeginHorizontal();

            //Choose window state
            GUI.color = (m_WindowState == AssetHunterWindowState.UnusedAssets) ? AssetHunterHelper.AH_GREY : m_IntialGUIColor;
            if (GUILayout.Button(AssetHunterWindowState.UnusedAssets.ToString(), GUILayout.MinWidth(btnMinWidth)))
            {
                changeState(AssetHunterWindowState.UnusedAssets);
            }
            EditorGUILayout.Space();

            GUI.color = (m_WindowState == AssetHunterWindowState.BuildReport) ? AssetHunterHelper.AH_GREY : m_IntialGUIColor;
            if (GUILayout.Button(AssetHunterWindowState.BuildReport.ToString(), GUILayout.MinWidth(btnMinWidth)))
            {
                //Shot buildreport
                changeState(AssetHunterWindowState.BuildReport);
            }

            GUILayout.FlexibleSpace();
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.Space();

            #region scriptdetection

            /*EditorGUILayout.BeginHorizontal();
             *
             * GUI.color = AssetHunterHelper.AH_RED;
             * if (GUILayout.Button(AssetHunterWindowState.UnusedScripts.ToString() + " (WIP - USE WITH CONSIDERATION)", GUILayout.MinWidth(btnMinWidth * 2 + 14)))
             * {
             *
             *  GUI.color = m_IntialGUIColor;
             *  //Get added scripts
             *  //List<Type> scriptAssemblyTypes = AssetHunterHelper.GetScriptAssembly();
             *
             *  //Find all enabled scenes in buildsettings
             *  EditorBuildSettingsScene[] activeScenes = EditorBuildSettings.scenes.Where(val => val.enabled == true).ToArray<EditorBuildSettingsScene>();
             *
             *
             *  //All script dependencies for all enabled levels in buildsettings
             *  m_UsedScriptList = AssetHunterHelper.GetScriptLevelDependencies(activeScenes);
             *
             *  //Find ALL scripts in scriptAssembly
             *  //TODO ADD THIS TO ATTEMPT TO LOCATE UNUSED CODE
             *  //m_UnusedScriptList = AssetHunterHelper.GetAddedComponents();
             *
             *  //Remove "Used Scripts" from list
             *  m_UnusedScriptList.RemoveAll(val => m_UsedScriptList.Contains(val));
             *
             *  changeState(AssetHunterWindowState.UnusedScripts);
             * }
             *
             * GUILayout.FlexibleSpace();
             * EditorGUILayout.EndHorizontal();
             * EditorGUILayout.Space();*/

            #endregion

            //Reset GUI Color
            GUI.color = m_IntialGUIColor;
        }
        private void showDefaultHeader()
        {
            EditorGUILayout.LabelField("Asset Hunter v2.6.3", EditorStyles.boldLabel);
            EditorGUILayout.BeginVertical();
            EditorGUILayout.BeginHorizontal();

            //BUTTON Settings
            EditorGUILayout.Space();
            // GUI.color = AssetHunterHelper.AH_BLUE;
            if (GUILayout.Button(new GUIContent("Edit settings", m_UISettings), GUILayout.Width(btnMinWidth - 70), GUILayout.Height(20)))
            {
                EditorWindow.GetWindow <AssetHunterSettingsWindow>(true, "Asset Hunter Settings");
            }

            //BUTTON Open Log
            EditorGUILayout.Space();
            //GUI.color = AssetHunterHelper.AH_RED;
            if (GUILayout.Button("Open log", GUILayout.MinWidth(100)))
            {
                System.Diagnostics.Process.Start(AssetHunterHelper.GetLogFolderPath());
            }

            //BUTTON delete empty folders
            EditorGUILayout.Space();
            //GUI.color = AssetHunterHelper.AH_BLUE;
            if (GUILayout.Button("Delete empty folders", GUILayout.MinWidth(120)))
            {
                if (EditorUtility.DisplayDialog("Delete empty folder", "Are you sure you want to delete all empty folders", "Yes", "No"))
                {
                    string path        = Application.dataPath;
                    int    deleteCount = 0;
                    deleteEmptyDirectories(path, ref deleteCount);

                    Debug.LogWarning(deleteCount + " empty folders was deleted by Asset Hunter");
                }
            }

            GUILayout.FlexibleSpace();
            EditorGUILayout.EndHorizontal();

            GUILayout.Space(5);

            EditorGUILayout.BeginHorizontal();

            //BUTTON Settings
            EditorGUILayout.Space();
            if (GUILayout.Button("Scene overview", GUILayout.Width(btnMinWidth - 70), GUILayout.Height(20)))
            {
                EditorWindow.GetWindow <AssetHunterSceneOverview>(true, "Asset Hunter Scene Overview");
            }

            GUILayout.FlexibleSpace();
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.Space();

            GUI.color = m_IntialGUIColor;

            //Show logo
            if (m_window && m_window.m_UIWideLogo)
            {
                GUILayout.Label(m_window.m_UIWideLogo);
            }

            //Only show the foldout if we actually have any manually excluded folders or types
            if (settings != null && settings.HasExcludes())
            {
                bShowExcludeFoldout = EditorGUILayout.Foldout(bShowExcludeFoldout, "Show manual excludes");
            }

            EditorGUILayout.EndVertical();
        }
 public AssemblyInfo(System.Reflection.Assembly assembly)
 {
     this.AssemblyName = assembly.ManifestModule.Name;
     this.size         = AssetHunterHelper.GetActualFileSize(assembly.Location);
     this.sizeString   = (this.size != -1) ? AssetHunterHelper.SizeSuffix(this.size, 1) : "NA";
 }