From 0a3bfa23a80b0d31b08d09d3e48d30cb75964559 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期一, 01 六月 2026 18:37:49 +0800
Subject: [PATCH] 打包修改

---
 Assets/Editor/AssetBundleBrowser/AssetBundleBuildTab.cs |  177 +++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 131 insertions(+), 46 deletions(-)

diff --git a/Assets/Editor/AssetBundleBrowser/AssetBundleBuildTab.cs b/Assets/Editor/AssetBundleBrowser/AssetBundleBuildTab.cs
index 7c0c862..4869c12 100644
--- a/Assets/Editor/AssetBundleBrowser/AssetBundleBuildTab.cs
+++ b/Assets/Editor/AssetBundleBrowser/AssetBundleBuildTab.cs
@@ -16,6 +16,7 @@
 using HybridCLR.Editor;
 using System.Text;
 using Cysharp.Threading.Tasks;
+using YooAsset.Editor;
 
 namespace UnityEngine.AssetBundles
 {
@@ -382,43 +383,7 @@
                 EditorApplication.delayCall += ExecuteBuildAll;
             }
 
-            EditorGUILayout.BeginHorizontal();
-
-            if (GUILayout.Button("Prefab"))
-            {
-                EditorApplication.delayCall += ExcuteBuildConfig;
-            }
-
-            if (GUILayout.Button("UI+UIEffect"))
-            {
-                EditorApplication.delayCall += ExcuteBuildUI;
-            }
-
-            if (GUILayout.Button("Builtin"))
-            {
-                EditorApplication.delayCall += ExcuteBuildBuiltIn;
-            }
-
-            if (GUILayout.Button("Audio"))
-            {
-                EditorApplication.delayCall += ExcuteBuildAudio;
-            }
-
-            if (GUILayout.Button("Video"))
-            {
-                EditorApplication.delayCall += ExcuteBuildVideo;
-            }
-
-            if (GUILayout.Button("Battle"))
-            {
-                EditorApplication.delayCall += ExcuteBuildMobEffectShader;
-            }
-
-            if (GUILayout.Button("Dll(HybridCLR)"))
-            {
-                EditorApplication.delayCall += ExcuteBuildHybridclrUpdate;
-            }
-            EditorGUILayout.EndHorizontal();
+            DrawYooAssetPackageButtons();
 
             EditorGUILayout.Space();
             if (GUILayout.Button("瀵煎嚭鍒� LocalCDN (D:\\LocalCDN)"))
@@ -492,8 +457,8 @@
             EditorGUILayout.Space();
             GUILayout.BeginHorizontal();
 
-            ClientPackage.includeConfig = EditorGUILayout.Toggle("Include Config ", ClientPackage.includeConfig, GUILayout.Width(250));
-            ClientPackage.includeUI = EditorGUILayout.Toggle("Include UI ", ClientPackage.includeUI, GUILayout.Width(250));
+            ClientPackage.includeConfig = EditorGUILayout.Toggle("Include Config Package", ClientPackage.includeConfig, GUILayout.Width(250));
+            ClientPackage.includeUI = EditorGUILayout.Toggle("Include UI Base Packages", ClientPackage.includeUI, GUILayout.Width(250));
 
             GUILayout.EndHorizontal();
             EditorGUILayout.Space();
@@ -617,6 +582,119 @@
             YooAssetBuildTool.CopyBuildOutputToLocalCDNFlat();
         }
 
+        private static readonly string[] YooAssetPackageButtonOrder =
+        {
+            "Builtin",
+            "Dll",
+            "Config",
+            "Shader",
+            "Materials",
+            "ScriptableObject",
+            "Scenes",
+            "Audio",
+            "Battle",
+            "Hero",
+            "UI",
+            "UIEffect",
+            "Video",
+        };
+
+        private void DrawYooAssetPackageButtons()
+        {
+            var packageNames = GetYooAssetPackageNames();
+            if (packageNames.Count == 0)
+            {
+                EditorGUILayout.HelpBox("AssetBundleCollectorSetting 涓病鏈夐厤缃� YooAsset Package銆�", MessageType.Warning);
+                return;
+            }
+
+            EditorGUILayout.LabelField("Build Single Package", EditorStyles.boldLabel);
+            int columns = Mathf.Max(1, Mathf.FloorToInt((EditorGUIUtility.currentViewWidth - 30f) / 155f));
+            for (int i = 0; i < packageNames.Count; i++)
+            {
+                if (i % columns == 0)
+                    EditorGUILayout.BeginHorizontal();
+
+                string packageName = packageNames[i];
+                if (GUILayout.Button(GetYooAssetPackageButtonLabel(packageName)))
+                {
+                    string capturedPackageName = packageName;
+                    EditorApplication.delayCall += () => ExecuteBuildYooAssetPackage(capturedPackageName);
+                }
+
+                if (i % columns == columns - 1 || i == packageNames.Count - 1)
+                    EditorGUILayout.EndHorizontal();
+            }
+        }
+
+        private List<string> GetYooAssetPackageNames()
+        {
+            var result = new List<string>();
+            var setting = AssetBundleCollectorSettingData.Setting;
+            if (setting == null || setting.Packages == null)
+                return result;
+
+            foreach (var packageName in YooAssetPackageButtonOrder)
+            {
+                if (HasYooAssetPackage(setting, packageName))
+                    result.Add(packageName);
+            }
+
+            foreach (var package in setting.Packages)
+            {
+                if (package == null || string.IsNullOrEmpty(package.PackageName))
+                    continue;
+
+                if (!ContainsPackageName(result, package.PackageName))
+                    result.Add(package.PackageName);
+            }
+
+            return result;
+        }
+
+        private static bool HasYooAssetPackage(AssetBundleCollectorSetting setting, string packageName)
+        {
+            foreach (var package in setting.Packages)
+            {
+                if (package != null && string.Equals(package.PackageName, packageName, StringComparison.OrdinalIgnoreCase))
+                    return true;
+            }
+
+            return false;
+        }
+
+        private static bool ContainsPackageName(List<string> packageNames, string packageName)
+        {
+            foreach (var item in packageNames)
+            {
+                if (string.Equals(item, packageName, StringComparison.OrdinalIgnoreCase))
+                    return true;
+            }
+
+            return false;
+        }
+
+        private static string GetYooAssetPackageButtonLabel(string packageName)
+        {
+            return string.Equals(packageName, "Dll", StringComparison.OrdinalIgnoreCase) ? "Dll(HybridCLR)" : packageName;
+        }
+
+        private void ExecuteBuildYooAssetPackage(string packageName)
+        {
+            if (string.Equals(packageName, "Builtin", StringComparison.OrdinalIgnoreCase))
+            {
+                ExcuteBuildBuiltIn();
+            }
+            else if (string.Equals(packageName, "Dll", StringComparison.OrdinalIgnoreCase))
+            {
+                ExcuteBuildHybridclrUpdate();
+            }
+            else
+            {
+                ExcuteBuildAsset(packageName);
+            }
+        }
+
         private void ExcuteBuildAsset(string yooPackageName)
         {
             string version = YooAssetBuildTool.GenerateVersion();
@@ -626,8 +704,11 @@
 
             if (ok)
             {
-                YooAssetBuildTool.CopyStartupConfigsToStreamingAssets();
-                Debug.Log($"[AssetBundleBuildTab] Package '{yooPackageName}' 鎵撳寘鎴愬姛锛�");
+                bool copied = YooAssetBuildTool.CopySinglePackageBuildOutput(yooPackageName, m_UserData.m_OutputPath, version);
+                if (copied)
+                    Debug.Log($"[AssetBundleBuildTab] Package '{yooPackageName}' 鎵撳寘骞舵嫹璐濇垚鍔燂紒");
+                else
+                    Debug.LogError($"[AssetBundleBuildTab] Package '{yooPackageName}' 鎵撳寘鎴愬姛锛屼絾鎷疯礉鍒� StreamingAssets/澶栭儴璧勬簮鐩綍澶辫触锛�");
             }
             else
             {
@@ -662,7 +743,7 @@
 
         private void ExcuteBuildConfig()
         {
-            ExcuteBuildAsset("Prefab");
+            ExcuteBuildAsset("Config");
         }
         
         //鍙戝寘鏃惰幏鍙栫儹鏇磀ll鍜岃鍓狝OT
@@ -700,8 +781,14 @@
                 return;
             }
 
+            if (!YooAssetBuildTool.CopySinglePackageBuildOutput("Dll", m_UserData.m_OutputPath, version))
+            {
+                Debug.LogError("[AssetBundleBuildTab] Dll Package 鎵撳寘鎴愬姛锛屼絾鎷疯礉鍒� StreamingAssets/澶栭儴璧勬簮鐩綍澶辫触锛�");
+                return;
+            }
+
             AssetDatabase.Refresh();
-            Debug.Log("[AssetBundleBuildTab] 鐑洿鏂� DLL 澧為噺鎵撳寘瀹屾垚銆�");
+            Debug.Log("[AssetBundleBuildTab] 鐑洿鏂� DLL 澧為噺鎵撳寘骞舵嫹璐濆畬鎴愩��");
         }
 
 
@@ -870,13 +957,11 @@
 
         private void ExcuteBuildLevels()
         {
-            // Scenes 鍦� YooAsset 鐨� Prefab Package 涓�
-            ExcuteBuildAsset("Prefab");
+            ExcuteBuildAsset("Scenes");
         }
 
         private void ExcuteBuildUI()
         {
-            // UI 鍜� UIEffect 鏄袱涓嫭绔� Package
             ExcuteBuildAsset("UI");
             ExcuteBuildAsset("UIEffect");
         }

--
Gitblit v1.8.0