123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- //using System;
- //using System.Collections.Generic;
- //using System.IO;
- //using UnityEditor;
- //namespace UnityGuidRegenerator
- //{
- // public class UnityGuidRegeneratorMenu
- // {
- // [MenuItem("Tools/Regenerate asset GUIDs")]
- // public static void RegenerateGuids()
- // {
- // if (EditorUtility.DisplayDialog("GUIDs regeneration",
- // "You are going to start the process of GUID regeneration. This may have unexpected results. \n\n MAKE A PROJECT BACKUP BEFORE PROCEEDING!",
- // "Regenerate GUIDs", "Cancel"))
- // {
- // try
- // {
- // AssetDatabase.StartAssetEditing();
- // string path = Path.GetFullPath(".") + Path.DirectorySeparatorChar + "Assets";//要更新guid的文件夹
- // UnityGuidRegenerator regenerator = new UnityGuidRegenerator(path);
- // regenerator.RegenerateGuids();
- // }
- // finally
- // {
- // AssetDatabase.StopAssetEditing();
- // EditorUtility.ClearProgressBar();
- // AssetDatabase.Refresh();
- // }
- // }
- // }
- // }
- // internal class UnityGuidRegenerator
- // {
- // private static readonly string[] kDefaultFileExtensions = {
- // // "*.meta",
- // // "*.mat",
- // // "*.anim",
- // // "*.prefab",
- // // "*.unity",
- // // "*.asset"
- // "*.*"
- // };
- // private readonly string _assetsPath;
- // public UnityGuidRegenerator(string assetsPath)
- // {
- // _assetsPath = assetsPath;
- // }
- // public void RegenerateGuids(string[] regeneratedExtensions = null)
- // {
- // if (regeneratedExtensions == null)
- // {
- // regeneratedExtensions = kDefaultFileExtensions;
- // }
- // // Get list of working files
- // List<string> filesPaths = new List<string>();
- // foreach (string extension in regeneratedExtensions)
- // {
- // filesPaths.AddRange(
- // Directory.GetFiles(_assetsPath, extension, SearchOption.AllDirectories)
- // );
- // }
- // // Create dictionary to hold old-to-new GUID map
- // Dictionary<string, string> guidOldToNewMap = new Dictionary<string, string>();
- // Dictionary<string, List<string>> guidsInFileMap = new Dictionary<string, List<string>>();
- // // We must only replace GUIDs for Resources present in Assets.
- // // Otherwise built-in resources (shader, meshes etc) get overwritten.
- // HashSet<string> ownGuids = new HashSet<string>();
- // // Traverse all files, remember which GUIDs are in which files and generate new GUIDs
- // int counter = 0;
- // foreach (string filePath in filesPaths)
- // {
- // EditorUtility.DisplayProgressBar("Scanning Assets folder", MakeRelativePath(_assetsPath, filePath), counter / (float)filesPaths.Count);
- // string contents = File.ReadAllText(filePath);
- // IEnumerable<string> guids = GetGuids(contents);
- // bool isFirstGuid = true;
- // foreach (string oldGuid in guids)
- // {
- // // First GUID in .meta file is always the GUID of the asset itself
- // if (isFirstGuid && Path.GetExtension(filePath) == ".meta")
- // {
- // ownGuids.Add(oldGuid);
- // isFirstGuid = false;
- // }
- // // Generate and save new GUID if we haven't added it before
- // if (!guidOldToNewMap.ContainsKey(oldGuid))
- // {
- // string newGuid = Guid.NewGuid().ToString("N");
- // guidOldToNewMap.Add(oldGuid, newGuid);
- // }
- // if (!guidsInFileMap.ContainsKey(filePath))
- // guidsInFileMap[filePath] = new List<string>();
- // if (!guidsInFileMap[filePath].Contains(oldGuid))
- // {
- // guidsInFileMap[filePath].Add(oldGuid);
- // }
- // }
- // counter++;
- // }
- // // Traverse the files again and replace the old GUIDs
- // counter = -1;
- // int guidsInFileMapKeysCount = guidsInFileMap.Keys.Count;
- // foreach (string filePath in guidsInFileMap.Keys)
- // {
- // EditorUtility.DisplayProgressBar("Regenerating GUIDs", MakeRelativePath(_assetsPath, filePath), counter / (float)guidsInFileMapKeysCount);
- // counter++;
- // string contents = File.ReadAllText(filePath);
- // foreach (string oldGuid in guidsInFileMap[filePath])
- // {
- // if (!ownGuids.Contains(oldGuid))
- // continue;
- // string newGuid = guidOldToNewMap[oldGuid];
- // if (string.IsNullOrEmpty(newGuid))
- // throw new NullReferenceException("newGuid == null");
- // contents = contents.Replace("guid: " + oldGuid, "guid: " + newGuid);
- // }
- // File.WriteAllText(filePath, contents);
- // }
- // EditorUtility.ClearProgressBar();
- // }
- // private static IEnumerable<string> GetGuids(string text)
- // {
- // const string guidStart = "guid: ";
- // const int guidLength = 32;
- // int textLength = text.Length;
- // int guidStartLength = guidStart.Length;
- // List<string> guids = new List<string>();
- // int index = 0;
- // while (index + guidStartLength + guidLength < textLength)
- // {
- // index = text.IndexOf(guidStart, index, StringComparison.Ordinal);
- // if (index == -1)
- // break;
- // index += guidStartLength;
- // string guid = text.Substring(index, guidLength);
- // index += guidLength;
- // if (IsGuid(guid))
- // {
- // guids.Add(guid);
- // }
- // }
- // return guids;
- // }
- // private static bool IsGuid(string text)
- // {
- // for (int i = 0; i < text.Length; i++)
- // {
- // char c = text[i];
- // if (
- // !((c >= '0' && c <= '9') ||
- // (c >= 'a' && c <= 'z'))
- // )
- // return false;
- // }
- // return true;
- // }
- // private static string MakeRelativePath(string fromPath, string toPath)
- // {
- // Uri fromUri = new Uri(fromPath);
- // Uri toUri = new Uri(toPath);
- // Uri relativeUri = fromUri.MakeRelativeUri(toUri);
- // string relativePath = Uri.UnescapeDataString(relativeUri.ToString());
- // return relativePath;
- // }
- // }
- //}
|