diff --git a/Assets/YooAsset/Samples~/Extension Sample/Editor/CreateBuildinCatalog.meta b/Assets/YooAsset/Samples~/Extension Sample/Editor/CreateBuildinCatalog.meta new file mode 100644 index 00000000..5a5b3d6e --- /dev/null +++ b/Assets/YooAsset/Samples~/Extension Sample/Editor/CreateBuildinCatalog.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f450f29c62aedae4390edc923f71811d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Samples~/Extension Sample/Editor/CreateBuildinCatalog/CreateBuildinCatalogWindow.cs b/Assets/YooAsset/Samples~/Extension Sample/Editor/CreateBuildinCatalog/CreateBuildinCatalogWindow.cs new file mode 100644 index 00000000..b8c03bda --- /dev/null +++ b/Assets/YooAsset/Samples~/Extension Sample/Editor/CreateBuildinCatalog/CreateBuildinCatalogWindow.cs @@ -0,0 +1,92 @@ +using System.IO; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEditor; + +namespace YooAsset.Editor +{ + public class CreateBuildinCatalogWindow : EditorWindow + { + static CreateBuildinCatalogWindow _thisInstance; + + [MenuItem("Tools/内置清单生成工具(Catalog)", false, 101)] + static void ShowWindow() + { + if (_thisInstance == null) + { + _thisInstance = EditorWindow.GetWindow(typeof(CreateBuildinCatalogWindow), false, "内置清单生成工具", true) as CreateBuildinCatalogWindow; + _thisInstance.minSize = new Vector2(800, 600); + } + _thisInstance.Show(); + } + + private string _directoryRoot = string.Empty; + + private void OnGUI() + { + GUILayout.Space(10); + EditorGUILayout.BeginHorizontal(); + if (GUILayout.Button("选择内置资源目录", GUILayout.MaxWidth(150))) + { + string resultPath = EditorUtility.OpenFolderPanel("Find", "Assets/", "StreamingAssets"); + if (!string.IsNullOrEmpty(resultPath)) + _directoryRoot = resultPath; + } + EditorGUILayout.LabelField(_directoryRoot); + EditorGUILayout.EndHorizontal(); + + if (string.IsNullOrEmpty(_directoryRoot) == false) + { + if (GUILayout.Button("生成Catalog文件", GUILayout.MaxWidth(150))) + { + CreateCatalogFile(_directoryRoot); + } + } + } + + private void CreateCatalogFile(string directoryRoot) + { + // 搜索所有Package目录 + List packageRoots = GetPackageRoots(directoryRoot); + foreach (var packageRoot in packageRoots) + { + DirectoryInfo directoryInfo = new DirectoryInfo(packageRoot); + string packageName = directoryInfo.Name; + try + { + bool result = CatalogTools.CreateCatalogFile(null, packageName, packageRoot); //TODO 自行处理解密 + if (result == false) + { + Debug.LogError($"Create package {packageName} catalog file failed ! See the detail error in console !"); + } + } + catch (System.Exception ex) + { + Debug.LogError($"Create package {packageName} catalog file failed ! {ex.Message}"); + } + } + } + private List GetPackageRoots(string rootPath) + { + // 检查目录是否存在 + if (Directory.Exists(rootPath) == false) + { + throw new DirectoryNotFoundException($"目录不存在: {rootPath}"); + } + + // 搜索所有 .version 文件(包含子目录) + string[] versionFiles = Directory.GetFiles( + rootPath, + "*.version", + SearchOption.AllDirectories + ); + + // 提取文件所在目录路径并去重 + return versionFiles + .Select(file => Path.GetDirectoryName(file)) + .Distinct() + .ToList(); + } + } +} \ No newline at end of file diff --git a/Assets/YooAsset/Samples~/Extension Sample/Editor/CreateBuildinCatalog/CreateBuildinCatalogWindow.cs.meta b/Assets/YooAsset/Samples~/Extension Sample/Editor/CreateBuildinCatalog/CreateBuildinCatalogWindow.cs.meta new file mode 100644 index 00000000..528015a1 --- /dev/null +++ b/Assets/YooAsset/Samples~/Extension Sample/Editor/CreateBuildinCatalog/CreateBuildinCatalogWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 16ab831593388974fa7e8f8c7e8199a8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: