123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- namespace AtlasUtility
- {
- using UnityEditor;
- using UnityEngine;
- using UnityEditor.SceneManagement;
- using System;
- using System.IO;
- using System.Linq;
- using System.Collections.Generic;
- using System.Text.RegularExpressions;
- public class ReferenceManager
- {
- public static void FindReference(string path)
- {
- SerializationMode userSerializationMode = EditorSettings.serializationMode;
- EditorSettings.serializationMode = SerializationMode.ForceText;
- string guid = AssetDatabase.AssetPathToGUID(path);
- List<string> pathList = GetAllFile(true);
- for (int i = 0; i < pathList.Count; i++)
- {
- EditorUtility.DisplayProgressBar("匹配", pathList[i], (i + 1) / (float)pathList.Count);
- int count = Regex.Matches(File.ReadAllText(pathList[i]), guid).Count;
- if (count > 0)
- {
- Debug.LogWarning($"{count}处引用 {pathList[i].GetRelativePath()}");
- }
- }
- EditorUtility.ClearProgressBar();
- EditorSettings.serializationMode = userSerializationMode;
- }
- public static void ChangeReference(bool includeMaterial, List<string> fromList, List<string> toList)
- {
- if (fromList.Count != toList.Count)
- {
- throw new Exception("遇到一个Bug");
- }
- if (fromList.Count == 0)
- {
- return;
- }
- AssetDatabase.SaveAssets();
- EditorSceneManager.SaveOpenScenes();
- SerializationMode userSerializationMode = EditorSettings.serializationMode;
- EditorSettings.serializationMode = SerializationMode.ForceText;
- List<string> pathList = GetAllFile(includeMaterial);
- for (int i = 0; i < pathList.Count; i++)
- {
- EditorUtility.DisplayProgressBar("修改引用", Path.GetFileNameWithoutExtension(pathList[i]), (i + 1) / (float)pathList.Count);
- string originText = File.ReadAllText(pathList[i]);
- string newText = originText;
- for (int j = 0; j < fromList.Count; j++)
- {
- newText = newText.Replace(fromList[j], toList[j]);
- }
- if (newText != originText)
- {
- File.WriteAllText(pathList[i], newText);
- }
- }
- EditorUtility.ClearProgressBar();
- EditorSettings.serializationMode = userSerializationMode;
- AssetDatabase.Refresh();
- }
- public static List<string> GetAllFile(bool includeMaterial)
- {
- List<string> searchExtension = new List<string>()
- {
- ".asset",
- ".anim",
- ".unity",
- ".prefab"
- };
- if (includeMaterial)
- {
- searchExtension.Add(".mat");
- }
- List<string> pathList = Directory.GetFiles(Application.dataPath, "*.*", SearchOption.AllDirectories).Where
- (
- path =>
- {
- string extension = Path.GetExtension(path);
- if (searchExtension.Contains(extension))
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- )
- .ToList();
- return pathList;
- }
- public static List<string> GetChildSpritePath(string atlasPath)
- {
- string atlasGUID = AssetDatabase.AssetPathToGUID(atlasPath);
- List<string> spritePathList = new List<string>();
- List<AtlasReferencePair> referencePairList = AtlasReferenceTable.ReadAllLine();
- foreach (var referencePair in referencePairList)
- {
- AtlasReference atlasReference = referencePair.AtlasReference;
- AtlasReference sourceAtlasReference = referencePair.SourceAtlasReference;
- if (atlasReference.GUID == atlasGUID)
- {
- spritePathList.Add(AssetDatabase.GUIDToAssetPath(sourceAtlasReference.GUID));
- }
- }
- return spritePathList;
- }
- }
- }
|