public static void PerformActionInScenes(string progressBarTitle, IList <string> scenePaths, SceneProcessingAction action) { if (EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo()) { string originalScene = UnityEngine.SceneManagement.SceneManager.GetActiveScene().path; try { for (int i = 0; i < scenePaths.Count; i++) { SceneAsset scene = AssetDatabase.LoadAssetAtPath <SceneAsset>(scenePaths[i]); if (EditorUtility.DisplayCancelableProgressBar(progressBarTitle, "(" + (i + 1) + "/" + scenePaths.Count + ") " + scene.name, ((float)i) / scenePaths.Count)) { break; } if (EditorSceneManager.OpenScene(scenePaths[i], OpenSceneMode.Single).IsValid()) { action(scene, scenePaths[i]); } } EditorUtility.ClearProgressBar(); } catch (Exception e) { UnityEngine.Debug.LogException(e); } finally { EditorSceneManager.OpenScene(originalScene, OpenSceneMode.Single); EditorUtility.ClearProgressBar(); } } }
public static void PerformActionInScenes(string progressBarTitle, Predicate <string> scenePathFilter, SceneProcessingAction action) { if (EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo()) { string originalScene = UnityEngine.SceneManagement.SceneManager.GetActiveScene().path; try { string[] scenesGUIDs = AssetDatabase.FindAssets("t:Scene"); List <string> scenePaths = new List <string>(); for (int i = 0; i < scenesGUIDs.Length; i++) { string path = AssetDatabase.GUIDToAssetPath(scenesGUIDs[i]); if (path.StartsWith("Assets/") && (scenePathFilter == null || scenePathFilter(path))) { scenePaths.Add(path); } } for (int i = 0; i < scenePaths.Count; i++) { SceneAsset scene = AssetDatabase.LoadAssetAtPath <SceneAsset>(scenePaths[i]); if (EditorUtility.DisplayCancelableProgressBar(progressBarTitle, "(" + (i + 1) + " / " + scenePaths.Count + ") " + scene.name, ((float)i) / scenePaths.Count)) { break; } if (EditorSceneManager.OpenScene(scenePaths[i], OpenSceneMode.Single).IsValid()) { action(scene, scenePaths[i]); } } EditorUtility.ClearProgressBar(); } catch (Exception e) { UnityEngine.Debug.LogException(e); } finally { EditorSceneManager.OpenScene(originalScene, OpenSceneMode.Single); EditorUtility.ClearProgressBar(); } } }
public static void PerformActionInScenes(string progressBarTitle, SceneProcessingAction action) { PerformActionInScenes(progressBarTitle, (Predicate <string>)null, action); }