| 
					
				 | 
			
			
				@@ -0,0 +1,163 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+using System; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+using System.IO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+using System.Linq; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+using UnityEditor; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+using UnityEngine; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+using AssetBank.Settings; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+using System.Collections.Generic; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+using IntelligentProjectAnalyzer.Helper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+namespace AssetBank.Editor.Tools 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public static class GuidMapperExporter 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        private enum ExportFor 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Script, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Scene, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Prefab, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ScriptableObject, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            All 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        [Serializable] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public class GuidMapper 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            public string Guid { get; set; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            public string Path { get; set; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        [MenuItem("Tools/GUID Exporter/Export Script GUIDs")] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public static void ExportScriptGuids() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Export(ExportFor.Script); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        [MenuItem("Tools/GUID Exporter/Export Scene GUIDs")] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public static void ExportSceneGuids() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Export(ExportFor.Scene); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        [MenuItem("Tools/GUID Exporter/Export Prefab GUIDs")] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public static void ExportPrefabGuids() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Export(ExportFor.Prefab); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        [MenuItem("Tools/GUID Exporter/Export ScriptableObject GUIDs")] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public static void ExportScriptableObjectGuids() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Export(ExportFor.ScriptableObject); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        private static void Export(ExportFor exportFor) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var (searchPattern, extension) = GetSearchPattern(exportFor); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var searchResults = AssetDatabase.FindAssets(searchPattern, new[] { "Assets" }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var settings = ProjectExporterSettings.GetOrCreateSettings(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var folderToIgnore = settings.FoldersToIgnore; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var mapperList = new List<GuidMapper>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            foreach (var guid in searchResults) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var path = AssetDatabase.GUIDToAssetPath(guid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (extension != "*" && !path.EndsWith(extension)) continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var directoryName = Path.GetDirectoryName(path); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (folderToIgnore.Any(folder => directoryName != null && directoryName.StartsWith(folder, StringComparison.OrdinalIgnoreCase))) continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var guidMapper = new GuidMapper 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    Guid = guid, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    Path = path 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                mapperList.Add(guidMapper); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var savePath = EditorUtility.SaveFilePanel("Save GUID Mapper", Application.dataPath, $"{exportFor} - guidMapper", "json"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!string.IsNullOrEmpty(savePath)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                JsonFileSystem.Write(mapperList, savePath); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Debug.Log($"Successfully exported {mapperList.Count} {exportFor} GUIDs"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        private static (string searchPattern, string extension) GetSearchPattern(ExportFor exportFor) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return exportFor switch 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ExportFor.Script => ("t:MonoScript", "cs"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ExportFor.Scene => ("t:SceneAsset", "unity"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ExportFor.Prefab => ("t:Prefab", "prefab"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ExportFor.ScriptableObject => ("t:ScriptableObject", "asset"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ExportFor.All => ("", "*"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                _ => throw new ArgumentOutOfRangeException(nameof(exportFor), exportFor, null) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        [MenuItem("Tools/GUID Exporter/Export All GUIDs")] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public static void ExportAllGuids() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            BulkExport(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        private static void BulkExport() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var typeToGuidMapper = new Dictionary<Type, List<GuidMapper>>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var settings = ProjectExporterSettings.GetOrCreateSettings(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var folderToIgnore = settings.FoldersToIgnore; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var assets = AssetDatabase.FindAssets("", new[] { "Assets" }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            foreach (var guid in assets) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var path = AssetDatabase.GUIDToAssetPath(guid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (folderToIgnore.Any(folder => path.StartsWith(folder, StringComparison.OrdinalIgnoreCase))) continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var extension = Path.GetExtension(path); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var type = AssetDatabase.GetMainAssetTypeAtPath(path); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (type == null || extension == null) continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (type.IsSubclassOf(typeof(ScriptableObject)) && extension == ".asset") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    type = typeof(ScriptableObject); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (type == typeof(DefaultAsset) && File.GetAttributes(path).HasFlag(FileAttributes.Directory)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var guidMapper = new GuidMapper 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    Guid = guid, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    Path = path 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (!typeToGuidMapper.ContainsKey(type)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    typeToGuidMapper[type] = new List<GuidMapper>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                typeToGuidMapper[type].Add(guidMapper); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var savePath = EditorUtility.SaveFilePanel("Save GUID Mappers", Application.dataPath, "guidMappers", "json"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!string.IsNullOrEmpty(savePath)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                foreach (var (type, guidMappers) in typeToGuidMapper) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    var friendlyName = type.Name.Split('.').Last(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    var fileName = $"{friendlyName} - guidMapper"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    var filePath = Path.Combine(Path.GetDirectoryName(savePath) ?? Application.dataPath, fileName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    JsonFileSystem.Write(guidMappers, filePath); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Debug.Log($"Exported {typeToGuidMapper.Count} GUID Mappers"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |