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); }
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); }
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++; } }