using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using System.IO; using System; using System.Text; public class IconNameReplaceTool { static string referencePath = Application.dataPath + "/切片资源"; static string rootPath = Application.dataPath + "/ResourcesOut/UI/Sprite"; static string spriteRelativePath = "Assets/ResourcesOut/UI/Sprite/"; static string textPath = Application.dataPath + "/ResourcesOut/Refdata/Config/Icon.txt"; static Dictionary> iconNameDictionary = new Dictionary>(); static Dictionary referenceResourceSizeAndNames = new Dictionary(); static string[] headLines = new string[3]; [MenuItem("程序/Sprite/Sprite名称过渡")] public static void IconNameNormalize() { try { ParseConfig(); ParseReferenceResources(); RenameSprites(); WriteIconConfig(); } catch (Exception ex) { Debug.Log("资源替换异常:" + ex); } finally { EditorUtility.ClearProgressBar(); } } static void ParseConfig() { var lines = File.ReadAllLines(textPath); for (int i = 0; i < 3; i++) { headLines[i] = lines[i]; } for (int i = 3; i < lines.Length; i++) { var line = lines[i]; var valueStrings = line.Split('\t'); for (int j = 0; j < valueStrings.Length; j++) { var folder = valueStrings[1]; var key = valueStrings[0]; var value = valueStrings[2]; Dictionary keyValues = null; if (!iconNameDictionary.ContainsKey(folder)) { iconNameDictionary[folder] = keyValues = new Dictionary(); } else { keyValues = iconNameDictionary[folder]; } keyValues[key] = value; } } } static void ParseReferenceResources() { var allFiles = new DirectoryInfo(referencePath).GetFiles("*.png", SearchOption.AllDirectories); for (int i = 0; i < allFiles.Length; i++) { var fileInfo = allFiles[i]; var size = fileInfo.Length; var name = fileInfo.Name; referenceResourceSizeAndNames[size] = name; } } static void RenameSprites() { var allFiles = new DirectoryInfo(rootPath).GetFiles("*.png", SearchOption.AllDirectories); var total = allFiles.Length; var index = 0; foreach (var file in allFiles) { var pathStringArray = file.DirectoryName.Split('\\'); var folderName = pathStringArray[pathStringArray.Length - 1]; var size = file.Length; if (referenceResourceSizeAndNames.ContainsKey(size)) { var oldName = file.Name.Replace(".png", ""); var newName = referenceResourceSizeAndNames[size].Replace(".png", ""); RenameAsset(StringUtility.Contact(spriteRelativePath, folderName, "/", file.Name), newName); ReplaceIconConfig(folderName, oldName, newName); } index++; EditorUtility.DisplayProgressBar("替换图片名", "替换中.......", index / (float)total); } EditorUtility.ClearProgressBar(); } static void WriteIconConfig() { var lines = new List(); lines.AddRange(headLines); foreach (var key in iconNameDictionary.Keys) { var keyValues = iconNameDictionary[key]; foreach (var keyValue in keyValues) { lines.Add(StringUtility.Contact(keyValue.Key, "\t", key, "\t", keyValue.Value)); } } File.WriteAllLines(textPath, lines.ToArray(), Encoding.UTF8); } private static void ReplaceIconConfig(string _folder, string _fileName, string _newFileName) { if (iconNameDictionary.ContainsKey(_folder)) { var keyValues = iconNameDictionary[_folder]; foreach (var key in keyValues.Keys) { if (keyValues[key] == _fileName) { keyValues[key] = _newFileName; break; } } } } static void RenameAsset(string _path, string _newName) { AssetDatabase.RenameAsset(_path, _newName); } }