UnifiedExporter.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. using System.IO;
  2. using UnityEditor;
  3. using UnityEngine;
  4. using UnityEngine.UIElements;
  5. using AssetBank.DockableWindow;
  6. using System.Collections.Generic;
  7. using AssetBank.Editor.DockableWindow;
  8. using AssetBank.DockableWindow.UIHelper;
  9. namespace AssetBank.Editor.Tools
  10. {
  11. public class UnifiedExporter : EditorWindow
  12. {
  13. private VisualElement _rootElement;
  14. private VisualElement _contentContainer;
  15. private ProjectExporterController _controller;
  16. private GuidMapperExporter.ExportFor _exportFor;
  17. private Dictionary<string, AssetModel> _assetTrees;
  18. private bool _exportScenes = true;
  19. private bool _exportPrefabs = true;
  20. private bool _exportScriptableObjects = true;
  21. private bool _exportMetaFiles = true;
  22. private bool _exportSettings = true;
  23. private bool _exportScriptsIndependently;
  24. private bool _copyScripts = true;
  25. private bool _exportAllGuidMappers = true;
  26. [MenuItem("Tools/GUI/Unified Exporter")]
  27. public static void ShowWindow()
  28. {
  29. var wnd = GetWindow<UnifiedExporter>(true);
  30. wnd.titleContent = new GUIContent("Unified Exporter", EditorGUIUtility.IconContent("d_Profiler.GlobalIllumination").image);
  31. wnd.minSize = new Vector2(400, 300);
  32. }
  33. private void OnEnable()
  34. {
  35. _assetTrees = new Dictionary<string, AssetModel>();
  36. _controller = new ProjectExporterController();
  37. _rootElement = rootVisualElement;
  38. BuildUI();
  39. }
  40. private void BuildUI()
  41. {
  42. var scrollView = new ScrollView(ScrollViewMode.Vertical);
  43. _rootElement.Add(scrollView);
  44. _contentContainer = ProjectExporterUI.CreateMainContainer();
  45. scrollView.Add(_contentContainer);
  46. DrawToggles();
  47. var generateButton = ProjectExporterUI.CreateGenerateButton();
  48. _rootElement.Add(generateButton);
  49. generateButton.clicked += PerformExportOperation;
  50. }
  51. private void DrawToggles()
  52. {
  53. var scenesToggle = ProjectExporterUI.CreateToggle("Export Scenes", _exportScenes, evt => _exportScenes = evt.newValue);
  54. var prefabsToggle = ProjectExporterUI.CreateToggle("Export Prefabs", _exportPrefabs, evt => _exportPrefabs = evt.newValue);
  55. var soToggle = ProjectExporterUI.CreateToggle("Export Scriptable Objects", _exportScriptableObjects, evt => _exportScriptableObjects = evt.newValue);
  56. var metaToggle = ProjectExporterUI.CreateToggle("Export Meta Files", _exportMetaFiles, evt => _exportMetaFiles = evt.newValue);
  57. var settingsToggle = ProjectExporterUI.CreateToggle("Export Settings", _exportSettings, evt => _exportSettings = evt.newValue);
  58. var exportScriptsToggle = ProjectExporterUI.CreateToggle("Export Scripts Separately", _exportScriptsIndependently, evt => _exportScriptsIndependently = evt.newValue);
  59. var copyScriptsToggle = ProjectExporterUI.CreateToggle("Copy Scripts", _copyScripts, evt => _copyScripts = evt.newValue);
  60. var exportAllGuidMappersToggle = ProjectExporterUI.CreateToggle("Export All Guid Mappers", _exportAllGuidMappers, evt => _exportAllGuidMappers = evt.newValue);
  61. _contentContainer.Add(scenesToggle);
  62. _contentContainer.Add(prefabsToggle);
  63. _contentContainer.Add(soToggle);
  64. _contentContainer.Add(metaToggle);
  65. _contentContainer.Add(settingsToggle);
  66. var separator = ProjectExporterUI.CreateSeparator();
  67. _contentContainer.Add(separator);
  68. _contentContainer.Add(exportScriptsToggle);
  69. _contentContainer.Add(copyScriptsToggle);
  70. var separator2 = ProjectExporterUI.CreateSeparator();
  71. _contentContainer.Add(separator2);
  72. _contentContainer.Add(exportAllGuidMappersToggle);
  73. }
  74. private void PerformExportOperation()
  75. {
  76. var savePath = EditorUtility.SaveFolderPanel("Choose export destination", Application.dataPath, "");
  77. if (string.IsNullOrEmpty(savePath)) return;
  78. ExportAssetData(savePath);
  79. CopyScripts(savePath);
  80. ExportGuidMappers(savePath);
  81. EditorUtility.DisplayDialog("Bulk Export", "Bulk export process finished.", "OK");
  82. }
  83. private void ExportAssetData(string savePath)
  84. {
  85. if (_exportScenes) ExportAllOfType("Scenes", savePath);
  86. if (_exportPrefabs) ExportAllOfType("Prefabs", savePath);
  87. if (_exportScriptableObjects) ExportAllOfType("Scriptable Objects", savePath);
  88. if (_exportMetaFiles) ExportAllOfType("Meta Files", savePath);
  89. if (_exportSettings) ExportAllOfType("Settings", savePath);
  90. }
  91. private void CopyScripts(string savePath)
  92. {
  93. var exportPath = _exportScriptsIndependently ? Path.Combine(savePath, "Scripts") : Path.Combine(savePath, "Assets");
  94. ScriptExporter.ProcessAndCopyScripts(exportPath);
  95. }
  96. private void ExportGuidMappers(string savePath)
  97. {
  98. var exportPath = Path.Combine(savePath, "GuidMappers");
  99. if (_exportAllGuidMappers) GuidMapperExporter.BulkExport(exportPath);
  100. }
  101. private void ExportAllOfType(string type, string savePath)
  102. {
  103. if (!_assetTrees.ContainsKey(type))
  104. {
  105. ProjectExporterDataHelper.LoadAssetTree(_assetTrees, _controller, type);
  106. }
  107. var rootModel = _assetTrees[type];
  108. if (rootModel != null)
  109. {
  110. ProjectExporterDataHelper.SetChildrenSelection(rootModel, true);
  111. _controller.ExportAssets(rootModel, savePath);
  112. }
  113. }
  114. }
  115. }