ScriptExporter.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using System;
  2. using System.IO;
  3. using System.Linq;
  4. using UnityEditor;
  5. using UnityEngine;
  6. using AssetBank.Settings;
  7. using System.Collections.Generic;
  8. namespace AssetBank.Editor.Tools
  9. {
  10. public static class ScriptExporter
  11. {
  12. [MenuItem("Tools/Script Exporter/Export Scripts")]
  13. public static void ExportScripts()
  14. {
  15. var settings = ProjectExporterSettings.GetOrCreateSettings();
  16. var foldersToIgnore = settings.FoldersToIgnore;
  17. var scriptGuids = AssetDatabase.FindAssets("t:Script", new[] { "Assets" });
  18. var filteredScriptPaths = new List<string>();
  19. foreach (var guid in scriptGuids)
  20. {
  21. var path = AssetDatabase.GUIDToAssetPath(guid);
  22. var directoryName = Path.GetDirectoryName(path);
  23. if (foldersToIgnore.Any(folder => directoryName != null && directoryName.StartsWith(folder, StringComparison.OrdinalIgnoreCase))) continue;
  24. filteredScriptPaths.Add(path);
  25. }
  26. var savePath = EditorUtility.SaveFolderPanel("Choose destination to copy scripts into", Application.dataPath, "");
  27. if (string.IsNullOrEmpty(savePath)) return;
  28. foreach (var scriptPath in filteredScriptPaths)
  29. {
  30. CopyFile(scriptPath, savePath);
  31. }
  32. }
  33. private static void CopyFile(string sourcePath, string targetDir)
  34. {
  35. var relativePath = Path.GetRelativePath(Application.dataPath, sourcePath);
  36. var targetPath = Path.Combine(targetDir, relativePath);
  37. var dirName = Path.GetDirectoryName(targetPath);
  38. if (!Directory.Exists(dirName))
  39. {
  40. if (dirName != null) Directory.CreateDirectory(dirName);
  41. }
  42. File.Copy(sourcePath, targetPath, true);
  43. }
  44. }
  45. }