From 1de64278ada678c783c529a8eecbae4047642447 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E5=86=A0=E5=B3=B0?= Date: Mon, 4 Aug 2025 18:36:43 +0800 Subject: [PATCH] =?UTF-8?q?sample=20:=20=E6=96=B0=E5=A2=9E=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=86=85=E7=BD=AE=E6=B8=85=E5=8D=95=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=9A=84=E9=A1=B5=E9=9D=A2=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Editor/CreateBuildinCatalog.meta | 8 ++ .../CreateBuildinCatalogWindow.cs | 92 +++++++++++++++++++ .../CreateBuildinCatalogWindow.cs.meta | 11 +++ 3 files changed, 111 insertions(+) create mode 100644 Assets/YooAsset/Samples~/Extension Sample/Editor/CreateBuildinCatalog.meta create mode 100644 Assets/YooAsset/Samples~/Extension Sample/Editor/CreateBuildinCatalog/CreateBuildinCatalogWindow.cs create mode 100644 Assets/YooAsset/Samples~/Extension Sample/Editor/CreateBuildinCatalog/CreateBuildinCatalogWindow.cs.meta 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: