Exemplo n.º 1
0
        private static bool ScanSceneFiles(List <CleanerRecord> results, bool showProgress = true)
        {
            bool canceled = false;

            currentPhase++;

            string[] scenesPaths = CSEditorTools.FindAssetsFiltered("t:Scene", MaintainerSettings.Cleaner.pathIgnores);

            int scenesCount = scenesPaths.Length;

            for (int i = 0; i < scenesCount; i++)
            {
                if (showProgress && EditorUtility.DisplayCancelableProgressBar(string.Format(PROGRESS_CAPTION, currentPhase, phasesCount, i + 1, scenesCount), "Scanning scene files...", (float)i / scenesCount))
                {
                    canceled = true;
                    break;
                }

                string scenePath = scenesPaths[i];

                if (CSSceneTools.GetCurrentScenePath() != scenePath)
                {
                    CSSceneTools.OpenScene(scenePath);
                }

#if UNITY_5_3_PLUS
                // if we're scanning currently opened scene and going to scan more scenes,
                // we need to close all additional scenes to avoid duplicates
                else if (EditorSceneManager.loadedSceneCount > 1 && scenesCount > 1)
                {
                    CSSceneTools.CloseAllScenesButActive();
                }
#endif
                int objectsInScene = 0;

                GameObject[] gameObjects = CSEditorTools.GetAllSuitableGameObjectsInCurrentScene();
                objectsInScene = gameObjects.Length;

                if (objectsInScene == 0)
                {
                    results.Add(AssetRecord.Create(RecordType.EmptyScene, scenePath));
                }
            }

            return(!canceled);
        }
Exemplo n.º 2
0
        private static bool ScanProjectFiles(ICollection <CleanerRecord> results, bool showProgress = true)
        {
            currentPhase++;

            List <string> ignoredScenes = new List <string>();

            if (MaintainerSettings.Cleaner.ignoreScenesInBuild)
            {
                ignoredScenes.AddRange(CSSceneTools.GetScenesInBuild(!MaintainerSettings.Cleaner.ignoreOnlyEnabledScenesInBuild));
            }

            CheckScenesForExistence(results, ignoredScenes, "Scenes in build");

            foreach (string scene in MaintainerSettings.Cleaner.sceneIgnores)
            {
                if (!ignoredScenes.Contains(scene))
                {
                    ignoredScenes.Add(scene);
                }
            }

            CheckScenesForExistence(results, ignoredScenes, "Scene Ignores");

            if (ignoredScenes.Count == 0)
            {
                results.Add(CleanerErrorRecord.Create("No ignored scenes, terminating unused assets search!"));
                return(false);
            }

            List <string> ignores = MaintainerSettings.Cleaner.pathIgnores.ToList();

            ignores.Add("Assets/Editor Default Resources");
            ignores.Add("/Resources/");
            ignores.Add("/StreamingAssets/");
            ignores.Add("/Gizmos/");
            ignores.Add("/Editor/");
            ignores.Add("/Plugins/");
            ignores.Add(".dll");
            ignores.Add(".rsp");
            ignores.AddRange(ignoredScenes);
            ignores.AddRange(CSEditorTools.FindAssetsFiltered("t:Script"));

            List <string> assets                 = new List <string>();
            List <string> usedAssets             = new List <string>();
            List <string> assetsWithDependencies = new List <string>();

            string[] allAssets = CSEditorTools.FindAssetsFiltered("t:Object t:GUISkin", null, ignores.ToArray());
            int      count     = allAssets.Length;

            for (int i = 0; i < count; i++)
            {
                if (showProgress && EditorUtility.DisplayCancelableProgressBar(string.Format(PROGRESS_CAPTION, currentPhase, phasesCount, i + 1, count), "Gathering all assets...", (float)i / count))
                {
                    return(true);
                }

                string asset = allAssets[i];

                if (File.Exists(asset))
                {
                    if (assets.IndexOf(asset) == -1)
                    {
                        assets.Add(asset);
                    }
                }
            }

            assetsWithDependencies.AddRange(ignoredScenes);

            List <string> foldersAddedToBuild = new List <string>();

            foldersAddedToBuild.AddRange(CSEditorTools.FindFoldersFiltered("Resources"));
            foldersAddedToBuild.AddRange(CSEditorTools.FindFoldersFiltered("StreamingAssets"));

            assetsWithDependencies.AddRange(CSEditorTools.FindAssetsInFolders("t:Object t:GUISkin", foldersAddedToBuild.ToArray()));

            count = assetsWithDependencies.Count;

            for (int i = 0; i < count; i++)
            {
                if (showProgress && EditorUtility.DisplayCancelableProgressBar(string.Format(PROGRESS_CAPTION, currentPhase, phasesCount, i + 1, count), "Looking for dependencies...", (float)i / count))
                {
                    return(true);
                }

                string[] dependencies = AssetDatabase.GetDependencies(new [] { assetsWithDependencies[i] });

                foreach (string dependency in dependencies)
                {
                    if (!File.Exists(dependency))
                    {
                        continue;
                    }

                    if (usedAssets.IndexOf(dependency) == -1)
                    {
                        usedAssets.Add(dependency);
                    }
                }
            }

            foreach (string usedAsset in usedAssets)
            {
                if (assets.IndexOf(usedAsset) != -1)
                {
                    assets.Remove(usedAsset);
                }
            }

            foreach (string asset in assets)
            {
                results.Add(AssetRecord.Create(RecordType.UnusedAsset, asset));
            }

            return(false);
        }
Exemplo n.º 3
0
        private static void CollectInput()
        {
            phasesCount  = 0;
            currentPhase = 0;

            scenesCount  = 0;
            prefabsCount = 0;

            if (MaintainerSettings.Issues.scanGameObjects)
            {
                if (MaintainerSettings.Issues.lookInScenes)
                {
                    EditorUtility.DisplayProgressBar(MODULE_NAME, "Collecting input data: Scenes...", 0);

                    if (MaintainerSettings.Issues.scenesSelection == IssuesFinderSettings.ScenesSelection.AllScenes)
                    {
                        scenesPaths = CSEditorTools.FindAssetsFiltered("t:Scene", MaintainerSettings.Issues.pathIgnores);                         //Directory.GetFiles("Assets", "*.unity", SearchOption.AllDirectories);
                    }
                    else if (MaintainerSettings.Issues.scenesSelection == IssuesFinderSettings.ScenesSelection.BuildScenesOnly)
                    {
                        scenesPaths = GetEnabledScenesInBuild();
                    }
                    else
                    {
                        scenesPaths = new[] { CSSceneTools.GetCurrentScenePath() };
                    }

                    scenesCount = scenesPaths.Length;

                    /*for (int i = 0; i < scenesCount; i++)
                     * {
                     *      scenesPaths[i] = scenesPaths[i].Replace('\\', '/');
                     * }*/

                    phasesCount++;
                }

                if (MaintainerSettings.Issues.lookInAssets)
                {
                    if (prefabs == null)
                    {
                        prefabs = new List <GameObject>();
                    }
                    else
                    {
                        prefabs.Clear();
                    }

                    if (prefabsPaths == null)
                    {
                        prefabsPaths = new List <string>();
                    }
                    else
                    {
                        prefabsPaths.Clear();
                    }

                    EditorUtility.DisplayProgressBar(MODULE_NAME, "Collecting input data: Prefabs...", 0);

                    string[] filteredPaths = CSEditorTools.FindAssetsFiltered("t:Prefab", MaintainerSettings.Issues.pathIgnores);
                    prefabsCount = CSEditorTools.GetSuitablePrefabsFromSelection(filteredPaths, prefabs, prefabsPaths);

                    phasesCount++;
                }
            }

            if (MaintainerSettings.Issues.scanProjectSettings)
            {
                phasesCount++;
            }
        }