/// <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; // 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)) { 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(); } } // Load back the original scene EditorApplication.OpenScene(startingScene); // Return the replaced references count return count; }
/// <summary> /// Replaces all the references in the project (does not work with internal properties). /// </summary> /// <param name="spriteInfoList">Sprite info list.</param> /// <param name="spriteRenderersOnly">If set to <c>true</c> sprite renderers only.</param> /// <returns>The replaced references count.</returns> public static int ReplaceReferencesInProject(List<SPSpriteInfo> spriteInfoList, SPReferenceReplacerWindow.ReplaceMode replaceMode, bool spriteRenderersOnly) { Component[] comps = SPTools.GetProjectPrefabComponents(); bool replaceAtlas = (replaceMode == SPReferenceReplacerWindow.ReplaceMode.AtlasWithSource); int count = 0; 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); } return count; }