/// <summary> /// Replaces all the references in all scenes. /// </summary> /// <param name="spriteInfoList">Sprite info list.</param> /// <param name="spriteRenderersOnly">If set to <c>true</c> sprite renderers only.</param> /// <param name="skipCurrent">If set to <c>true</c> skip current scene.</param> /// <returns>The replaced references count.</returns> public static int ReplaceReferencesInAllScenes(List <SPSpriteInfo> spriteInfoList, SPReferenceReplacerWindow.ReplaceMode replaceMode, bool spriteRenderersOnly, bool skipCurrent) { int count = 0; bool replaceAtlas = (replaceMode == SPReferenceReplacerWindow.ReplaceMode.AtlasWithSource); // Grab the current scene name //string startingScene = EditorApplication.currentScene; Scene scene = EditorSceneManager.GetActiveScene(); string startingScene = scene.ToString(); // Get all scene names string[] sceneNames = SPTools.GetAllScenesNames(); if (sceneNames.Length == 0) { return(count); } foreach (string sceneName in sceneNames) { // Check if we should skip the scene if (skipCurrent && sceneName.Equals(startingScene)) { continue; } // Try opening the scene //if (EditorApplication.OpenScene(sceneName)) Scene _scene = EditorSceneManager.OpenScene(sceneName); if (EditorSceneManager.SetActiveScene(_scene)) { Component[] comps = Object.FindObjectsOfType <Component>(); foreach (SPSpriteInfo spriteInfo in spriteInfoList) { if (spriteInfo.source == null || !(spriteInfo.source is Sprite) || spriteInfo.targetSprite == null) { continue; } count += SPTools.ReplaceReferences(comps, (replaceAtlas ? spriteInfo.targetSprite : (spriteInfo.source as Sprite)), (replaceAtlas ? (spriteInfo.source as Sprite) : spriteInfo.targetSprite), spriteRenderersOnly); } //EditorApplication.SaveScene(); Scene __scene = EditorSceneManager.GetActiveScene(); EditorSceneManager.SaveScene(__scene); } } // Load back the original scene //EditorApplication.OpenScene(sceneName) EditorSceneManager.OpenScene(startingScene); // Return the replaced references count return(count); }
/// <summary> /// Replaces all the references in all scenes. /// </summary> /// <param name="spriteInfoList">Sprite info list.</param> /// <param name="spriteRenderersOnly">If set to <c>true</c> sprite renderers only.</param> /// <param name="skipCurrent">If set to <c>true</c> skip current scene.</param> /// <returns>The replaced references count.</returns> public static int ReplaceReferencesInAllScenes(List <SPSpriteInfo> spriteInfoList, bool spriteRenderersOnly, bool skipCurrent) { int count = 0; // Grab the current scene name string startingScene = EditorSceneManager.GetActiveScene().name; // Get all scene names string[] sceneNames = SPTools.GetAllScenesNames(); if (sceneNames.Length == 0) { return(count); } foreach (string sceneName in sceneNames) { // Check if we should skip the scene if (skipCurrent && sceneName.Equals(startingScene)) { continue; } // Try opening the scene Scene scene = EditorSceneManager.OpenScene(sceneName, OpenSceneMode.Single); if (scene.IsValid()) { Component[] comps = Object.FindObjectsOfType <Component>(); foreach (SPSpriteInfo spriteInfo in spriteInfoList) { if (spriteInfo.source != null && spriteInfo.source is Sprite && spriteInfo.targetSprite != null) { count += SPTools.ReplaceReferences(comps, (spriteInfo.source as Sprite), spriteInfo.targetSprite, spriteRenderersOnly); } } EditorSceneManager.SaveOpenScenes(); } } // Load back the original scene EditorSceneManager.OpenScene(startingScene, OpenSceneMode.Single); // Return the replaced references count return(count); }