| | |
| | | using HybridCLR.Editor;
|
| | | using System.Text;
|
| | | using Cysharp.Threading.Tasks;
|
| | | using YooAsset.Editor;
|
| | |
|
| | | namespace UnityEngine.AssetBundles
|
| | | {
|
| | |
| | | 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)"))
|
| | |
| | | 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();
|
| | |
| | | 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();
|
| | |
| | |
|
| | | 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
|
| | | {
|
| | |
| | |
|
| | | private void ExcuteBuildConfig()
|
| | | {
|
| | | ExcuteBuildAsset("Prefab");
|
| | | ExcuteBuildAsset("Config");
|
| | | }
|
| | |
|
| | | //发包时获取热更dll和裁剪AOT
|
| | |
| | | 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 增量打包并拷贝完成。");
|
| | | }
|
| | |
|
| | |
|
| | |
| | |
|
| | | private void ExcuteBuildLevels()
|
| | | {
|
| | | // Scenes 在 YooAsset 的 Prefab Package 中
|
| | | ExcuteBuildAsset("Prefab");
|
| | | ExcuteBuildAsset("Scenes");
|
| | | }
|
| | |
|
| | | private void ExcuteBuildUI()
|
| | | {
|
| | | // UI 和 UIEffect 是两个独立 Package
|
| | | ExcuteBuildAsset("UI");
|
| | | ExcuteBuildAsset("UIEffect");
|
| | | }
|