com.jaimecamachodev.unityfolders 1.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. package/.attestation.p7m +0 -0
  2. package/Editor/FolderIconRecolorUtility.cs +71 -0
  3. package/Editor/FolderIconRecolorUtility.cs.meta +2 -0
  4. package/Editor/FolderIconsManager.cs +168 -0
  5. package/Editor/FolderIconsManager.cs.meta +2 -0
  6. package/Editor/FolderIconsPostprocessor.cs +14 -0
  7. package/Editor/FolderIconsPostprocessor.cs.meta +2 -0
  8. package/Editor/FolderIconsSettings.cs +40 -0
  9. package/Editor/FolderIconsSettings.cs.meta +2 -0
  10. package/Editor/FolderIconsSettingsEditor.cs +147 -0
  11. package/Editor/FolderIconsSettingsEditor.cs.meta +2 -0
  12. package/Editor/FolderIconsSettingsMenu.cs +35 -0
  13. package/Editor/FolderIconsSettingsMenu.cs.meta +2 -0
  14. package/Editor/UnityAssetsRenamer.cs +70 -0
  15. package/Editor/UnityAssetsRenamer.cs.meta +11 -0
  16. package/Editor/UnityFolderOrganizer.cs +215 -0
  17. package/Editor/UnityFolderOrganizer.cs.meta +2 -0
  18. package/Editor/UnityFoldersCreator.cs +118 -0
  19. package/Editor/UnityFoldersCreator.cs.meta +2 -0
  20. package/Editor/UnityMaterialsCreator.cs +386 -0
  21. package/Editor/UnityMaterialsCreator.cs.meta +11 -0
  22. package/Editor/UnityMaterialsOrganizerRenamer.cs +63 -0
  23. package/Editor/UnityMaterialsOrganizerRenamer.cs.meta +11 -0
  24. package/Editor/UnityOrganizeAndRenamer.cs +58 -0
  25. package/Editor/UnityOrganizeAndRenamer.cs.meta +11 -0
  26. package/Editor/UnityPrefabCreator.cs +128 -0
  27. package/Editor/UnityPrefabCreator.cs.meta +11 -0
  28. package/Editor/UnityProjectStructureCreator.cs +51 -0
  29. package/Editor/UnityProjectStructureCreator.cs.meta +2 -0
  30. package/Editor/com.jaimecamacho.unityfolders.Editor.asmdef +16 -0
  31. package/Editor/com.jaimecamacho.unityfolders.Editor.asmdef.meta +7 -0
  32. package/Editor.meta +8 -0
  33. package/FolderIconsSettings/FolderIconsSettings.asset +292 -0
  34. package/FolderIconsSettings/FolderIconsSettings.asset.meta +8 -0
  35. package/FolderIconsSettings.meta +8 -0
  36. package/Folders/5-Skyboxs_Large_tint.png +0 -0
  37. package/Folders/5-Skyboxs_Large_tint.png.meta +156 -0
  38. package/Folders/5-Skyboxs_Small_tint.png +0 -0
  39. package/Folders/5-Skyboxs_Small_tint.png.meta +156 -0
  40. package/Folders.meta +8 -0
  41. package/Icons/Animations.png +0 -0
  42. package/Icons/Animations.png.meta +156 -0
  43. package/Icons/Audio.png +0 -0
  44. package/Icons/Audio.png.meta +156 -0
  45. package/Icons/Editor.png +0 -0
  46. package/Icons/Editor.png.meta +156 -0
  47. package/Icons/Fonts.png +0 -0
  48. package/Icons/Fonts.png.meta +156 -0
  49. package/Icons/Materials.png +0 -0
  50. package/Icons/Materials.png.meta +156 -0
  51. package/Icons/Models.png +0 -0
  52. package/Icons/Models.png.meta +156 -0
  53. package/Icons/Plugins.png +0 -0
  54. package/Icons/Plugins.png.meta +156 -0
  55. package/Icons/Prefabs.png +0 -0
  56. package/Icons/Prefabs.png.meta +156 -0
  57. package/Icons/Presets.png +0 -0
  58. package/Icons/Presets.png.meta +156 -0
  59. package/Icons/Resources.png +0 -0
  60. package/Icons/Resources.png.meta +156 -0
  61. package/Icons/Scenes.png +0 -0
  62. package/Icons/Scenes.png.meta +156 -0
  63. package/Icons/Scripts.png +0 -0
  64. package/Icons/Scripts.png.meta +156 -0
  65. package/Icons/Settings.png +0 -0
  66. package/Icons/Settings.png.meta +156 -0
  67. package/Icons/Shaders.png +0 -0
  68. package/Icons/Shaders.png.meta +156 -0
  69. package/Icons/Sprites.png +0 -0
  70. package/Icons/Sprites.png.meta +156 -0
  71. package/Icons/Textures.png +0 -0
  72. package/Icons/Textures.png.meta +156 -0
  73. package/Icons/X16/-Test14.png +0 -0
  74. package/Icons/X16/-Test14.png.meta +130 -0
  75. package/Icons/X16/-Test3.png +0 -0
  76. package/Icons/X16/-Test3.png.meta +130 -0
  77. package/Icons/X16/1-3D.png +0 -0
  78. package/Icons/X16/1-3D.png.meta +130 -0
  79. package/Icons/X16/1-Programming.png +0 -0
  80. package/Icons/X16/1-Programming.png.meta +130 -0
  81. package/Icons/X16/10-Lighting.png +0 -0
  82. package/Icons/X16/10-Lighting.png.meta +130 -0
  83. package/Icons/X16/2-Art.png +0 -0
  84. package/Icons/X16/2-Art.png.meta +130 -0
  85. package/Icons/X16/2-VFX V2.png +0 -0
  86. package/Icons/X16/2-VFX V2.png.meta +130 -0
  87. package/Icons/X16/2-VFX.png +0 -0
  88. package/Icons/X16/2-VFX.png.meta +130 -0
  89. package/Icons/X16/3-SFX.png +0 -0
  90. package/Icons/X16/3-SFX.png.meta +130 -0
  91. package/Icons/X16/3-Scenes.png +0 -0
  92. package/Icons/X16/3-Scenes.png.meta +130 -0
  93. package/Icons/X16/4-Directors.png +0 -0
  94. package/Icons/X16/4-Directors.png.meta +130 -0
  95. package/Icons/X16/4-Presets.png +0 -0
  96. package/Icons/X16/4-Presets.png.meta +130 -0
  97. package/Icons/X16/5-Settings.png +0 -0
  98. package/Icons/X16/5-Settings.png.meta +130 -0
  99. package/Icons/X16/5-Skyboxes v2.png +0 -0
  100. package/Icons/X16/5-Skyboxes v2.png.meta +130 -0
  101. package/Icons/X16/5-Skyboxes.png +0 -0
  102. package/Icons/X16/5-Skyboxes.png.meta +130 -0
  103. package/Icons/X16/6-Videos.png +0 -0
  104. package/Icons/X16/6-Videos.png.meta +130 -0
  105. package/Icons/X16/7-SolidMats.png +0 -0
  106. package/Icons/X16/7-SolidMats.png.meta +130 -0
  107. package/Icons/X16/8-PostProcessing.png +0 -0
  108. package/Icons/X16/8-PostProcessing.png.meta +130 -0
  109. package/Icons/X16/9-UI.png +0 -0
  110. package/Icons/X16/9-UI.png.meta +130 -0
  111. package/Icons/X16/Animation_X16.png +0 -0
  112. package/Icons/X16/Animation_X16.png.meta +130 -0
  113. package/Icons/X16/Art_X16.png +0 -0
  114. package/Icons/X16/Art_X16.png.meta +130 -0
  115. package/Icons/X16/Audio_X16.png +0 -0
  116. package/Icons/X16/Audio_X16.png.meta +130 -0
  117. package/Icons/X16/C_Animation_X16.png +0 -0
  118. package/Icons/X16/C_Animation_X16.png.meta +130 -0
  119. package/Icons/X16/C_Audio_X16.png +0 -0
  120. package/Icons/X16/C_Audio_X16.png.meta +130 -0
  121. package/Icons/X16/C_Material_X16.png +0 -0
  122. package/Icons/X16/C_Material_X16.png.meta +130 -0
  123. package/Icons/X16/C_Mesh_X16.png +0 -0
  124. package/Icons/X16/C_Mesh_X16.png.meta +130 -0
  125. package/Icons/X16/C_Prefab_X16.png +0 -0
  126. package/Icons/X16/C_Prefab_X16.png.meta +130 -0
  127. package/Icons/X16/C_Script_X16.png +0 -0
  128. package/Icons/X16/C_Script_X16.png.meta +130 -0
  129. package/Icons/X16/C_VFX_X16.png +0 -0
  130. package/Icons/X16/C_VFX_X16.png.meta +130 -0
  131. package/Icons/X16/Director_X16.png +0 -0
  132. package/Icons/X16/Director_X16.png.meta +130 -0
  133. package/Icons/X16/Folder_X16.png +0 -0
  134. package/Icons/X16/Folder_X16.png.meta +130 -0
  135. package/Icons/X16/Light_X16.png +0 -0
  136. package/Icons/X16/Light_X16.png.meta +130 -0
  137. package/Icons/X16/Material_X16.png +0 -0
  138. package/Icons/X16/Material_X16.png.meta +130 -0
  139. package/Icons/X16/Mesh_X16.png +0 -0
  140. package/Icons/X16/Mesh_X16.png.meta +130 -0
  141. package/Icons/X16/PostPro_X16.png +0 -0
  142. package/Icons/X16/PostPro_X16.png.meta +130 -0
  143. package/Icons/X16/Prefab_X16.png +0 -0
  144. package/Icons/X16/Prefab_X16.png.meta +130 -0
  145. package/Icons/X16/Preset2_X16.png +0 -0
  146. package/Icons/X16/Preset2_X16.png.meta +130 -0
  147. package/Icons/X16/Preset_X16.png +0 -0
  148. package/Icons/X16/Preset_X16.png.meta +130 -0
  149. package/Icons/X16/SFX_X16.png +0 -0
  150. package/Icons/X16/SFX_X16.png.meta +130 -0
  151. package/Icons/X16/Scene_X16.png +0 -0
  152. package/Icons/X16/Scene_X16.png.meta +130 -0
  153. package/Icons/X16/Script_X16.png +0 -0
  154. package/Icons/X16/Script_X16.png.meta +130 -0
  155. package/Icons/X16/Settings2_X16.png +0 -0
  156. package/Icons/X16/Settings2_X16.png.meta +130 -0
  157. package/Icons/X16/Settings3_X16.png +0 -0
  158. package/Icons/X16/Settings3_X16.png.meta +130 -0
  159. package/Icons/X16/Settings_X16.png +0 -0
  160. package/Icons/X16/Settings_X16.png.meta +130 -0
  161. package/Icons/X16/Shader_X16.png +0 -0
  162. package/Icons/X16/Shader_X16.png.meta +130 -0
  163. package/Icons/X16/Skybox_X16.png +0 -0
  164. package/Icons/X16/Skybox_X16.png.meta +130 -0
  165. package/Icons/X16/SolidMats_X16.png +0 -0
  166. package/Icons/X16/SolidMats_X16.png.meta +130 -0
  167. package/Icons/X16/Text_X16.png +0 -0
  168. package/Icons/X16/Text_X16.png.meta +130 -0
  169. package/Icons/X16/UI_X16.png +0 -0
  170. package/Icons/X16/UI_X16.png.meta +130 -0
  171. package/Icons/X16/VFX_X16.png +0 -0
  172. package/Icons/X16/VFX_X16.png.meta +130 -0
  173. package/Icons/X16/Video_X16.png +0 -0
  174. package/Icons/X16/Video_X16.png.meta +130 -0
  175. package/Icons/X16.meta +8 -0
  176. package/Icons/x256/1-3Dx256.png +0 -0
  177. package/Icons/x256/1-3Dx256.png.meta +130 -0
  178. package/Icons/x256/1-Programmingx256.png +0 -0
  179. package/Icons/x256/1-Programmingx256.png.meta +130 -0
  180. package/Icons/x256/10-Lightingx256.png +0 -0
  181. package/Icons/x256/10-Lightingx256.png.meta +130 -0
  182. package/Icons/x256/2-Artx256.png +0 -0
  183. package/Icons/x256/2-Artx256.png.meta +130 -0
  184. package/Icons/x256/2-VFXx256.png +0 -0
  185. package/Icons/x256/2-VFXx256.png.meta +130 -0
  186. package/Icons/x256/3-SFXx256.png +0 -0
  187. package/Icons/x256/3-SFXx256.png.meta +130 -0
  188. package/Icons/x256/3-Scenesx256.png +0 -0
  189. package/Icons/x256/3-Scenesx256.png.meta +130 -0
  190. package/Icons/x256/4-Directorsx256.png +0 -0
  191. package/Icons/x256/4-Directorsx256.png.meta +130 -0
  192. package/Icons/x256/4-Presetsx256.png +0 -0
  193. package/Icons/x256/4-Presetsx256.png.meta +130 -0
  194. package/Icons/x256/5-Settingsx256.png +0 -0
  195. package/Icons/x256/5-Settingsx256.png.meta +130 -0
  196. package/Icons/x256/5-Skyboxes v2x256.png +0 -0
  197. package/Icons/x256/5-Skyboxes v2x256.png.meta +130 -0
  198. package/Icons/x256/6-Videosx256.png +0 -0
  199. package/Icons/x256/6-Videosx256.png.meta +130 -0
  200. package/Icons/x256/7-SolidMatsx256.png +0 -0
  201. package/Icons/x256/7-SolidMatsx256.png.meta +130 -0
  202. package/Icons/x256/8-PostProcessingx256.png +0 -0
  203. package/Icons/x256/8-PostProcessingx256.png.meta +130 -0
  204. package/Icons/x256/9-UIx256.png +0 -0
  205. package/Icons/x256/9-UIx256.png.meta +130 -0
  206. package/Icons/x256/B_Folder_White.png +0 -0
  207. package/Icons/x256/B_Folder_White.png.meta +130 -0
  208. package/Icons/x256/C_Animation_X256.png +0 -0
  209. package/Icons/x256/C_Animation_X256.png.meta +130 -0
  210. package/Icons/x256/C_Audio_X256.png +0 -0
  211. package/Icons/x256/C_Audio_X256.png.meta +130 -0
  212. package/Icons/x256/C_Material_X256.png +0 -0
  213. package/Icons/x256/C_Material_X256.png.meta +130 -0
  214. package/Icons/x256/C_Mesh_X256.png +0 -0
  215. package/Icons/x256/C_Mesh_X256.png.meta +130 -0
  216. package/Icons/x256/C_Prefab_X256.png +0 -0
  217. package/Icons/x256/C_Prefab_X256.png.meta +130 -0
  218. package/Icons/x256/C_Script_X256.png +0 -0
  219. package/Icons/x256/C_Script_X256.png.meta +130 -0
  220. package/Icons/x256/C_VFX_X256.png +0 -0
  221. package/Icons/x256/C_VFX_X256.png.meta +130 -0
  222. package/Icons/x256/Folder_White.png +0 -0
  223. package/Icons/x256/Folder_White.png.meta +156 -0
  224. package/Icons/x256/Shader_X256.png +0 -0
  225. package/Icons/x256/Shader_X256.png.meta +130 -0
  226. package/Icons/x256.meta +8 -0
  227. package/Icons.meta +8 -0
  228. package/PSD/PSD.psd +0 -0
  229. package/PSD/PSD.psd.meta +130 -0
  230. package/PSD/PSDx256.psd +0 -0
  231. package/PSD/PSDx256.psd.meta +130 -0
  232. package/PSD.meta +8 -0
  233. package/package.json +29 -0
  234. package/package.json.meta +7 -0
@@ -0,0 +1,215 @@
1
+ using UnityEngine;
2
+ using UnityEditor;
3
+ using System.IO;
4
+ using System.Linq;
5
+
6
+ public static class UnityFolderOrganizer
7
+ {
8
+ [MenuItem("Tools/JaimeCamachoDev/UnityFolders/Ordenar carpeta", false, 20)]
9
+ [MenuItem("Assets/JaimeCamachoDev/UnityFolders/Ordenar carpeta", false, 20)]
10
+ private static void OrganizeFolderMenu()
11
+ {
12
+ string folderPath = GetSelectedPathOrFallback();
13
+
14
+ if (!AssetDatabase.IsValidFolder(folderPath))
15
+ {
16
+ Debug.LogWarning("Por favor selecciona una carpeta válida para ordenar.");
17
+ return;
18
+ }
19
+ CreateSubfolderWizard.Show(folderPath);
20
+ }
21
+
22
+ internal static string OrganizeInChildFolder(string folderPath, string newFolderName)
23
+ {
24
+ if (string.IsNullOrWhiteSpace(newFolderName))
25
+ {
26
+ Debug.LogWarning("Por favor introduce un nombre válido para la nueva carpeta.");
27
+
28
+ return null;
29
+ }
30
+
31
+ string uniquePath = AssetDatabase.GenerateUniqueAssetPath(Path.Combine(folderPath, newFolderName));
32
+ string finalName = Path.GetFileName(uniquePath);
33
+ AssetDatabase.CreateFolder(folderPath, finalName);
34
+ string newFolderPath = Path.Combine(folderPath, finalName);
35
+
36
+ // Mover todos los assets y subcarpetas existentes a la nueva carpeta
37
+ foreach (string file in Directory.GetFiles(folderPath))
38
+ {
39
+ if (file.EndsWith(".meta"))
40
+ continue;
41
+
42
+ string destination = AssetDatabase.GenerateUniqueAssetPath(Path.Combine(newFolderPath, Path.GetFileName(file)));
43
+ AssetDatabase.MoveAsset(file, destination);
44
+ }
45
+
46
+ foreach (string directory in Directory.GetDirectories(folderPath))
47
+ {
48
+ string normalized = directory.Replace("\\", "/");
49
+ if (normalized == newFolderPath)
50
+ continue;
51
+
52
+ string destination = AssetDatabase.GenerateUniqueAssetPath(Path.Combine(newFolderPath, Path.GetFileName(directory)));
53
+ AssetDatabase.MoveAsset(normalized, destination);
54
+ }
55
+
56
+ AssetDatabase.Refresh();
57
+ OrganizeFolder(newFolderPath);
58
+ return newFolderPath;
59
+ }
60
+
61
+ internal static void OrganizeFolder(string folderPath)
62
+ {
63
+ string[] subfolders = new string[]
64
+ {
65
+ "Animation",
66
+ "Sound",
67
+ "Material",
68
+ "Mesh",
69
+ "Prefab",
70
+ "Script",
71
+ "Shader",
72
+ "VFX"
73
+ };
74
+
75
+ // Crear subcarpetas si no existen
76
+ foreach (string subfolder in subfolders)
77
+ {
78
+ string subfolderPath = Path.Combine(folderPath, subfolder);
79
+ if (!AssetDatabase.IsValidFolder(subfolderPath))
80
+ {
81
+ AssetDatabase.CreateFolder(folderPath, subfolder);
82
+ }
83
+ }
84
+
85
+ // Obtener todos los assets dentro de la carpeta seleccionada
86
+ string[] assetGuids = AssetDatabase.FindAssets(string.Empty, new[] { folderPath });
87
+ foreach (string guid in assetGuids)
88
+ {
89
+ string assetPath = AssetDatabase.GUIDToAssetPath(guid);
90
+
91
+ // Saltar carpetas
92
+ if (AssetDatabase.IsValidFolder(assetPath))
93
+ continue;
94
+
95
+ string destinationFolderName = GetDestinationFolderName(assetPath);
96
+ if (destinationFolderName == null)
97
+ continue;
98
+
99
+ string destinationPath = Path.Combine(folderPath, destinationFolderName, Path.GetFileName(assetPath));
100
+ destinationPath = AssetDatabase.GenerateUniqueAssetPath(destinationPath);
101
+ AssetDatabase.MoveAsset(assetPath, destinationPath);
102
+ }
103
+
104
+ RemoveEmptySubdirectories(folderPath);
105
+ AssetDatabase.Refresh();
106
+ Debug.Log($"Carpeta {folderPath} organizada.");
107
+ }
108
+
109
+ private static string GetDestinationFolderName(string assetPath)
110
+ {
111
+ string extension = Path.GetExtension(assetPath).ToLowerInvariant();
112
+
113
+ switch (extension)
114
+ {
115
+ case ".anim":
116
+ case ".controller":
117
+ case ".overridecontroller":
118
+ return "Animation";
119
+ case ".fbx":
120
+ var importer = AssetImporter.GetAtPath(assetPath) as ModelImporter;
121
+ if (importer != null && ((importer.clipAnimations != null && importer.clipAnimations.Length > 0) ||
122
+ (importer.defaultClipAnimations != null && importer.defaultClipAnimations.Length > 0)))
123
+ {
124
+ return "Animation";
125
+ }
126
+ return "Mesh";
127
+ case ".wav":
128
+ case ".mp3":
129
+ case ".ogg":
130
+ case ".aiff":
131
+ return "Sound";
132
+ case ".mat":
133
+ case ".png":
134
+ case ".jpg":
135
+ case ".jpeg":
136
+ case ".tga":
137
+ case ".tif":
138
+ case ".tiff":
139
+ case ".psd":
140
+ case ".bmp":
141
+ case ".gif":
142
+ case ".exr":
143
+ case ".hdr":
144
+ return "Material";
145
+ case ".obj":
146
+ case ".blend":
147
+ case ".mesh":
148
+ return "Mesh";
149
+ case ".prefab":
150
+ return "Prefab";
151
+ case ".cs":
152
+ case ".js":
153
+ case ".boo":
154
+ return "Script";
155
+ case ".shader":
156
+ case ".cginc":
157
+ case ".shadergraph":
158
+ case ".shadersubgraph":
159
+ case ".compute":
160
+ case ".hlsl":
161
+ return "Shader";
162
+ case ".vfx":
163
+ case ".vfxgraph":
164
+ return "VFX";
165
+ default:
166
+ return null;
167
+ }
168
+ }
169
+
170
+ private static void RemoveEmptySubdirectories(string rootPath)
171
+ {
172
+ var directories = Directory.GetDirectories(rootPath, "*", SearchOption.AllDirectories)
173
+ .OrderByDescending(d => d.Length);
174
+ foreach (string directory in directories)
175
+ {
176
+ if (Directory.GetFileSystemEntries(directory).Length == 0)
177
+ {
178
+ AssetDatabase.DeleteAsset(directory);
179
+ }
180
+ }
181
+ }
182
+
183
+ private static string GetSelectedPathOrFallback()
184
+ {
185
+ string path = "Assets";
186
+
187
+ foreach (Object obj in Selection.GetFiltered(typeof(Object), SelectionMode.Assets))
188
+ {
189
+ path = AssetDatabase.GetAssetPath(obj);
190
+ if (!string.IsNullOrEmpty(path) && File.Exists(path))
191
+ {
192
+ path = Path.GetDirectoryName(path);
193
+ break;
194
+ }
195
+ }
196
+ return path;
197
+ }
198
+ private class CreateSubfolderWizard : ScriptableWizard
199
+ {
200
+ public string newFolderName = "New Folder";
201
+ private string folderPath;
202
+
203
+ public static void Show(string folderPath)
204
+ {
205
+ var wizard = DisplayWizard<CreateSubfolderWizard>("Crear subcarpeta", "Organizar", "Cancelar");
206
+ wizard.folderPath = folderPath;
207
+ }
208
+
209
+ private void OnWizardCreate()
210
+ {
211
+ UnityFolderOrganizer.OrganizeInChildFolder(folderPath, newFolderName);
212
+ }
213
+ }
214
+ }
215
+
@@ -0,0 +1,2 @@
1
+ fileFormatVersion: 2
2
+ guid: dae72fea19cbb804297e0e605768ec13
@@ -0,0 +1,118 @@
1
+ using UnityEngine;
2
+ using UnityEditor;
3
+ using System.IO;
4
+
5
+ public static class UnityFoldersCreator
6
+ {
7
+ [MenuItem("Tools/JaimeCamachoDev/UnityFolders/Crear carpetas", false, 10)]
8
+ [MenuItem("Assets/JaimeCamachoDev/UnityFolders/Crear carpetas", false, 10)]
9
+ private static void CreateUnityFolders()
10
+ {
11
+ string folderPath = GetSelectedPathOrFallback();
12
+
13
+ // Abrir ventana de input directamente
14
+ string mainFolderName = FolderDialogUtility.DisplayDialogInput("Nombre de la Carpeta", "Introduce el nombre de la carpeta principal:", "New Folder");
15
+ if (string.IsNullOrEmpty(mainFolderName))
16
+ {
17
+ Debug.Log("Creaci�n de carpetas cancelada.");
18
+ return;
19
+ }
20
+
21
+ string uniqueFolderPath = AssetDatabase.GenerateUniqueAssetPath(Path.Combine(folderPath, mainFolderName));
22
+ AssetDatabase.CreateFolder(folderPath, Path.GetFileName(uniqueFolderPath));
23
+ AssetDatabase.Refresh();
24
+
25
+ CreateSubfolders(uniqueFolderPath);
26
+ Debug.Log($"Carpeta creada en: {uniqueFolderPath}");
27
+ }
28
+
29
+ private static void CreateSubfolders(string parentFolderPath)
30
+ {
31
+ string[] subfolders = new string[]
32
+ {
33
+ "Animation",
34
+ "Audio",
35
+ "Material",
36
+ "Mesh",
37
+ "Prefab",
38
+ "Script",
39
+ "Shader",
40
+ "VFX"
41
+ };
42
+
43
+ foreach (string subfolder in subfolders)
44
+ {
45
+ AssetDatabase.CreateFolder(parentFolderPath, subfolder);
46
+ }
47
+
48
+ AssetDatabase.Refresh();
49
+ }
50
+
51
+ private static string GetSelectedPathOrFallback()
52
+ {
53
+ string path = "Assets";
54
+
55
+ foreach (Object obj in Selection.GetFiltered(typeof(Object), SelectionMode.Assets))
56
+ {
57
+ path = AssetDatabase.GetAssetPath(obj);
58
+ if (!string.IsNullOrEmpty(path) && File.Exists(path))
59
+ {
60
+ path = Path.GetDirectoryName(path);
61
+ break;
62
+ }
63
+ }
64
+ return path;
65
+ }
66
+ }
67
+
68
+ public static class FolderDialogUtility
69
+ {
70
+ public static string DisplayDialogInput(string title, string message, string defaultText)
71
+ {
72
+ return InputDialog.Show(title, message, defaultText);
73
+ }
74
+ }
75
+
76
+ public class InputDialog : EditorWindow
77
+ {
78
+ private static string input = "";
79
+ private static string result = null;
80
+ private static string message;
81
+ private static string title;
82
+ private static string defaultText;
83
+
84
+ public static string Show(string title, string message, string defaultText)
85
+ {
86
+ InputDialog.title = title;
87
+ InputDialog.message = message;
88
+ InputDialog.defaultText = defaultText;
89
+ input = defaultText;
90
+
91
+ var window = ScriptableObject.CreateInstance<InputDialog>();
92
+ window.titleContent = new GUIContent(title);
93
+ window.position = new Rect(Screen.width / 2, Screen.height / 2, 400, 120);
94
+ window.ShowModal();
95
+ return result;
96
+ }
97
+
98
+ private void OnGUI()
99
+ {
100
+ EditorGUILayout.LabelField(message, EditorStyles.wordWrappedLabel);
101
+ GUILayout.Space(10);
102
+ input = EditorGUILayout.TextField("Nombre:", input);
103
+ GUILayout.Space(20);
104
+
105
+ GUILayout.BeginHorizontal();
106
+ if (GUILayout.Button("Aceptar"))
107
+ {
108
+ result = input;
109
+ Close();
110
+ }
111
+ if (GUILayout.Button("Cancelar"))
112
+ {
113
+ result = null;
114
+ Close();
115
+ }
116
+ GUILayout.EndHorizontal();
117
+ }
118
+ }
@@ -0,0 +1,2 @@
1
+ fileFormatVersion: 2
2
+ guid: 610945793de362e4d9fdcd2b7848609e