diff --git a/Assets/TEngine/Editor/Resource/EditorResourceBuilder.cs b/Assets/TEngine/Editor/Resource/EditorResourceBuilder.cs index 64272bf3..3e226fa9 100644 --- a/Assets/TEngine/Editor/Resource/EditorResourceBuilder.cs +++ b/Assets/TEngine/Editor/Resource/EditorResourceBuilder.cs @@ -41,7 +41,7 @@ public static class EditorResourceBuilder } else { - Debug.LogError($"构建失败 : {buildResult.FailedInfo}"); + Debug.LogError($"构建失败 : {buildResult.ErrorInfo}"); } } diff --git a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/AssetBundleBuilder.cs b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/AssetBundleBuilder.cs index 88b82e0b..9813d7f2 100644 --- a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/AssetBundleBuilder.cs +++ b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/AssetBundleBuilder.cs @@ -94,7 +94,7 @@ namespace YooAsset.Editor { BuildLogger.Warning($"{buildParameters.BuildMode} pipeline build failed !"); BuildLogger.Error($"Build task failed : {buildResult.FailedTask}"); - BuildLogger.Error($"Build task error : {buildResult.FailedInfo}"); + BuildLogger.Error(buildResult.ErrorInfo); } return buildResult; diff --git a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/AssetBundleBuilderSetting.cs b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/AssetBundleBuilderSetting.cs index 19f23d49..3d93766f 100644 --- a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/AssetBundleBuilderSetting.cs +++ b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/AssetBundleBuilderSetting.cs @@ -3,6 +3,7 @@ using UnityEngine; namespace YooAsset.Editor { + [CreateAssetMenu(fileName = "AssetBundleBuilderSetting", menuName = "YooAsset/Create AssetBundle Builder Settings")] public class AssetBundleBuilderSetting : ScriptableObject { /// diff --git a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/AssetBundleBuilderWindow.cs b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/AssetBundleBuilderWindow.cs index 9e4b8eae..9fe30195 100644 --- a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/AssetBundleBuilderWindow.cs +++ b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/AssetBundleBuilderWindow.cs @@ -12,7 +12,7 @@ namespace YooAsset.Editor public class AssetBundleBuilderWindow : EditorWindow { [MenuItem("YooAsset/AssetBundle Builder", false, 102)] - public static void ShowExample() + public static void OpenWindow() { AssetBundleBuilderWindow window = GetWindow("资源包构建工具", true, WindowsDefine.DockedWindowTypes); window.minSize = new Vector2(800, 600); @@ -275,6 +275,7 @@ namespace YooAsset.Editor buildParameters.PackageName = AssetBundleBuilderSettingData.Setting.BuildPackage; buildParameters.PackageVersion = _buildVersionField.value; buildParameters.VerifyBuildingResult = true; + buildParameters.ShareAssetPackRule = new DefaultShareAssetPackRule(); buildParameters.EncryptionServices = CreateEncryptionServicesInstance(); buildParameters.CompressOption = AssetBundleBuilderSettingData.Setting.CompressOption; buildParameters.OutputNameStyle = AssetBundleBuilderSettingData.Setting.OutputNameStyle; diff --git a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/BuildAssetInfo.cs b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/BuildAssetInfo.cs index 7999f92d..6802035b 100644 --- a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/BuildAssetInfo.cs +++ b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/BuildAssetInfo.cs @@ -157,7 +157,7 @@ namespace YooAsset.Editor /// /// 计算共享资源包的完整包名 /// - public void CalculateShareBundleName(bool uniqueBundleName, string packageName, string shadersBundleName) + public void CalculateShareBundleName(IShareAssetPackRule packRule, bool uniqueBundleName, string packageName, string shadersBundleName) { if (CollectorType != ECollectorType.None) return; @@ -173,8 +173,7 @@ namespace YooAsset.Editor { if (_referenceBundleNames.Count > 1) { - IPackRule packRule = PackDirectory.StaticPackRule; - PackRuleResult packRuleResult = packRule.GetPackRuleResult(new PackRuleData(AssetPath)); + PackRuleResult packRuleResult = packRule.GetPackRuleResult(AssetPath); BundleName = packRuleResult.GetShareBundleName(packageName, uniqueBundleName); } else diff --git a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/BuildParameters.cs b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/BuildParameters.cs index 3c324c7f..a5935235 100644 --- a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/BuildParameters.cs +++ b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/BuildParameters.cs @@ -76,9 +76,14 @@ namespace YooAsset.Editor /// 验证构建结果 /// public bool VerifyBuildingResult = false; - + /// - /// 加密类 + /// 共享资源的打包规则 + /// + public IShareAssetPackRule ShareAssetPackRule = null; + + /// + /// 资源的加密接口 /// public IEncryptionServices EncryptionServices = null; diff --git a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/BuildSystem/BuildResult.cs b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/BuildSystem/BuildResult.cs index c47623d1..fe4e251b 100644 --- a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/BuildSystem/BuildResult.cs +++ b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/BuildSystem/BuildResult.cs @@ -19,7 +19,7 @@ namespace YooAsset.Editor /// /// 构建失败的信息 /// - public string FailedInfo; + public string ErrorInfo; /// /// 输出的补丁包目录 diff --git a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/BuildSystem/BuildRunner.cs b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/BuildSystem/BuildRunner.cs index 9cc3e676..bab28d92 100644 --- a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/BuildSystem/BuildRunner.cs +++ b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/BuildSystem/BuildRunner.cs @@ -52,7 +52,7 @@ namespace YooAsset.Editor { EditorTools.ClearProgressBar(); buildResult.FailedTask = task.GetType().Name; - buildResult.FailedInfo = e.ToString(); + buildResult.ErrorInfo = e.ToString(); buildResult.Success = false; break; } diff --git a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/BuildTasks/TaskCreateManifest.cs b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/BuildTasks/TaskCreateManifest.cs index 310e36f6..1299b293 100644 --- a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/BuildTasks/TaskCreateManifest.cs +++ b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/BuildTasks/TaskCreateManifest.cs @@ -205,6 +205,7 @@ namespace YooAsset.Editor throw new Exception("没有发现着色器资源包!"); // 检测依赖交集并更新依赖ID + HashSet tagTemps = new HashSet(); foreach (var packageAsset in manifest.AssetList) { List dependBundles = GetPackageAssetAllDependBundles(manifest, packageAsset); @@ -215,8 +216,23 @@ namespace YooAsset.Editor if (newDependIDs.Contains(shaderBundleId) == false) newDependIDs.Add(shaderBundleId); packageAsset.DependIDs = newDependIDs.ToArray(); + foreach (var tag in packageAsset.AssetTags) + { + if (tagTemps.Contains(tag) == false) + tagTemps.Add(tag); + } } } + + // 更新资源包标签 + var packageBundle = manifest.BundleList[shaderBundleId]; + List newTags = new List(packageBundle.Tags); + foreach (var tag in tagTemps) + { + if (newTags.Contains(tag) == false) + newTags.Add(tag); + } + packageBundle.Tags = newTags.ToArray(); } private List GetPackageAssetAllDependBundles(PackageManifest manifest, PackageAsset packageAsset) { @@ -302,7 +318,7 @@ namespace YooAsset.Editor { if (packageBundle.IsRawFile) { - _cachedBundleDepends.Add(packageBundle.BundleName, new string[] { } ); + _cachedBundleDepends.Add(packageBundle.BundleName, new string[] { }); continue; } @@ -321,7 +337,7 @@ namespace YooAsset.Editor } EditorTools.ClearProgressBar(); } - + private int[] GetBundleRefrenceIDs(PackageManifest manifest, PackageBundle targetBundle) { List referenceList = new List(); diff --git a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/BuildTasks/TaskGetBuildMap.cs b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/BuildTasks/TaskGetBuildMap.cs index f3cd9a8b..709318fd 100644 --- a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/BuildTasks/TaskGetBuildMap.cs +++ b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/BuildTasks/TaskGetBuildMap.cs @@ -13,7 +13,8 @@ namespace YooAsset.Editor void IBuildTask.Run(BuildContext context) { var buildParametersContext = context.GetContextObject(); - var buildMapContext = CreateBuildMap(buildParametersContext.Parameters.BuildMode, buildParametersContext.Parameters.PackageName); + var buildParameters = buildParametersContext.Parameters; + var buildMapContext = CreateBuildMap(buildParameters.BuildMode, buildParameters.ShareAssetPackRule, buildParameters.PackageName); context.SetContextObject(buildMapContext); BuildLogger.Log("构建内容准备完毕!"); @@ -24,7 +25,7 @@ namespace YooAsset.Editor /// /// 资源构建上下文 /// - public BuildMapContext CreateBuildMap(EBuildMode buildMode, string packageName) + public BuildMapContext CreateBuildMap(EBuildMode buildMode, IShareAssetPackRule packRule, string packageName) { Dictionary allBuildAssetInfoDic = new Dictionary(1000); @@ -101,7 +102,7 @@ namespace YooAsset.Editor var command = collectResult.Command; foreach (var buildAssetInfo in allBuildAssetInfoDic.Values) { - buildAssetInfo.CalculateShareBundleName(command.UniqueBundleName, command.PackageName, command.ShadersBundleName); + buildAssetInfo.CalculateShareBundleName(packRule, command.UniqueBundleName, command.PackageName, command.ShadersBundleName); } // 9. 移除不参与构建的资源 diff --git a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/BuildTasks/TaskPrepare.cs b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/BuildTasks/TaskPrepare.cs index 5c324287..5a824d5d 100644 --- a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/BuildTasks/TaskPrepare.cs +++ b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleBuilder/BuildTasks/TaskPrepare.cs @@ -24,6 +24,13 @@ namespace YooAsset.Editor if (buildParameters.BuildMode != EBuildMode.SimulateBuild) { +#if UNITY_2021_3_OR_NEWER + if (buildParameters.BuildPipeline == EBuildPipeline.BuiltinBuildPipeline) + { + BuildLogger.Warning("推荐使用可编程构建管线(SBP)!"); + } +#endif + // 检测当前是否正在构建资源包 if (BuildPipeline.isBuildingPlayer) throw new Exception("当前正在构建资源包,请结束后再试"); @@ -40,6 +47,20 @@ namespace YooAsset.Editor throw new Exception("首包资源标签不能为空!"); } + // 检测共享资源打包规则 + if (buildParameters.ShareAssetPackRule == null) + throw new Exception("共享资源打包规则不能为空!"); + +#if UNITY_WEBGL + if (buildParameters.EncryptionServices != null) + { + if (buildParameters.EncryptionServices.GetType() != typeof(EncryptionNone)) + { + throw new Exception("WebGL平台不支持加密!"); + } + } +#endif + // 检测包裹输出目录是否存在 string packageOutputDirectory = buildParametersContext.GetPackageOutputDirectory(); if (Directory.Exists(packageOutputDirectory)) diff --git a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/AssetBundleCollector.cs b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/AssetBundleCollector.cs index 9a65e85c..f0ad20bf 100644 --- a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/AssetBundleCollector.cs +++ b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/AssetBundleCollector.cs @@ -197,16 +197,17 @@ namespace YooAsset.Editor // 检测可寻址地址是否重复 if (command.EnableAddressable) { - HashSet adressTemper = new HashSet(); + var addressTemper = new Dictionary(); foreach (var collectInfoPair in result) { if (collectInfoPair.Value.CollectorType == ECollectorType.MainAssetCollector) { string address = collectInfoPair.Value.Address; - if (adressTemper.Contains(address) == false) - adressTemper.Add(address); + string assetPath = collectInfoPair.Value.AssetPath; + if (addressTemper.TryGetValue(address, out var existed) == false) + addressTemper.Add(address, assetPath); else - throw new Exception($"The address is existed : {address} in collector : {CollectPath}"); + throw new Exception($"The address is existed : {address} in collector : {CollectPath} \nAssetPath:\n {existed}\n {assetPath}"); } } } @@ -243,8 +244,8 @@ namespace YooAsset.Editor return false; // 忽略编辑器下的类型资源 - Type type = AssetDatabase.GetMainAssetTypeAtPath(assetPath); - if (type == typeof(LightingDataAsset)) + Type assetType = AssetDatabase.GetMainAssetTypeAtPath(assetPath); + if (assetType == typeof(LightingDataAsset)) return false; // 检测原生文件是否合规 @@ -252,27 +253,29 @@ namespace YooAsset.Editor { string extension = StringUtility.RemoveFirstChar(System.IO.Path.GetExtension(assetPath)); if (extension == EAssetFileExtension.unity.ToString() || extension == EAssetFileExtension.prefab.ToString() || - extension == EAssetFileExtension.mat.ToString() || extension == EAssetFileExtension.controller.ToString() || - extension == EAssetFileExtension.fbx.ToString() || extension == EAssetFileExtension.anim.ToString() || - extension == EAssetFileExtension.shader.ToString()) + extension == EAssetFileExtension.fbx.ToString() || extension == EAssetFileExtension.mat.ToString() || + extension == EAssetFileExtension.controller.ToString() || extension == EAssetFileExtension.anim.ToString() || + extension == EAssetFileExtension.ttf.ToString() || extension == EAssetFileExtension.shader.ToString()) { UnityEngine.Debug.LogWarning($"Raw file pack rule can not support file estension : {extension}"); return false; } // 注意:原生文件只支持无依赖关系的资源 + /* string[] depends = AssetDatabase.GetDependencies(assetPath, true); if (depends.Length != 1) { UnityEngine.Debug.LogWarning($"Raw file pack rule can not support estension : {extension}"); return false; } + */ } else { // 忽略Unity无法识别的无效文件 // 注意:只对非原生文件收集器处理 - if (type == typeof(UnityEditor.DefaultAsset)) + if (assetType == typeof(UnityEditor.DefaultAsset)) { UnityEngine.Debug.LogWarning($"Cannot pack default asset : {assetPath}"); return false; @@ -287,10 +290,6 @@ namespace YooAsset.Editor } private bool IsCollectAsset(string assetPath) { - Type assetType = AssetDatabase.GetMainAssetTypeAtPath(assetPath); - if (assetType == typeof(UnityEngine.Shader) || assetType == typeof(UnityEngine.ShaderVariantCollection)) - return true; - // 根据规则设置过滤资源文件 IFilterRule filterRuleInstance = AssetBundleCollectorSettingData.GetFilterRuleInstance(FilterRuleName); return filterRuleInstance.IsCollectAsset(new FilterRuleData(assetPath)); diff --git a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/AssetBundleCollectorGroup.cs b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/AssetBundleCollectorGroup.cs index 0575619f..2818c776 100644 --- a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/AssetBundleCollectorGroup.cs +++ b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/AssetBundleCollectorGroup.cs @@ -96,16 +96,17 @@ namespace YooAsset.Editor // 检测可寻址地址是否重复 if (command.EnableAddressable) { - HashSet adressTemper = new HashSet(); + var addressTemper = new Dictionary(); foreach (var collectInfoPair in result) { if (collectInfoPair.Value.CollectorType == ECollectorType.MainAssetCollector) { string address = collectInfoPair.Value.Address; - if (adressTemper.Contains(address) == false) - adressTemper.Add(address); + string assetPath = collectInfoPair.Value.AssetPath; + if (addressTemper.TryGetValue(address, out var existed) == false) + addressTemper.Add(address, assetPath); else - throw new Exception($"The address is existed : {address} in group : {GroupName}"); + throw new Exception($"The address is existed : {address} in group : {GroupName} \nAssetPath:\n {existed}\n {assetPath}"); } } } diff --git a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/AssetBundleCollectorPackage.cs b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/AssetBundleCollectorPackage.cs index df6a8f2c..694dbc5f 100644 --- a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/AssetBundleCollectorPackage.cs +++ b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/AssetBundleCollectorPackage.cs @@ -76,16 +76,17 @@ namespace YooAsset.Editor // 检测可寻址地址是否重复 if (command.EnableAddressable) { - HashSet adressTemper = new HashSet(); + var addressTemper = new Dictionary(); foreach (var collectInfoPair in result) { if (collectInfoPair.Value.CollectorType == ECollectorType.MainAssetCollector) { string address = collectInfoPair.Value.Address; - if (adressTemper.Contains(address) == false) - adressTemper.Add(address); + string assetPath = collectInfoPair.Value.AssetPath; + if (addressTemper.TryGetValue(address, out var existed) == false) + addressTemper.Add(address, assetPath); else - throw new Exception($"The address is existed : {address}"); + throw new Exception($"The address is existed : {address} \nAssetPath:\n {existed}\n {assetPath}"); } } } diff --git a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/AssetBundleCollectorSetting.cs b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/AssetBundleCollectorSetting.cs index 15631479..3aba54bd 100644 --- a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/AssetBundleCollectorSetting.cs +++ b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/AssetBundleCollectorSetting.cs @@ -6,6 +6,7 @@ using UnityEngine; namespace YooAsset.Editor { + [CreateAssetMenu(fileName = "AssetBundleCollectorSetting", menuName = "YooAsset/Create AssetBundle Collector Settings")] public class AssetBundleCollectorSetting : ScriptableObject { /// diff --git a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/AssetBundleCollectorSettingData.cs b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/AssetBundleCollectorSettingData.cs index 51525343..5fd5aee4 100644 --- a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/AssetBundleCollectorSettingData.cs +++ b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/AssetBundleCollectorSettingData.cs @@ -27,24 +27,8 @@ namespace YooAsset.Editor public static bool IsDirty { private set; get; } = false; - private static AssetBundleCollectorSetting _setting = null; - public static AssetBundleCollectorSetting Setting + static AssetBundleCollectorSettingData() { - get - { - if (_setting == null) - LoadSettingData(); - return _setting; - } - } - - /// - /// 加载配置文件 - /// - private static void LoadSettingData() - { - _setting = SettingLoader.LoadSettingData(); - // IPackRule { // 清空缓存集合 @@ -147,6 +131,17 @@ namespace YooAsset.Editor } } + private static AssetBundleCollectorSetting _setting = null; + public static AssetBundleCollectorSetting Setting + { + get + { + if (_setting == null) + _setting = SettingLoader.LoadSettingData(); + return _setting; + } + } + /// /// 存储配置文件 /// @@ -184,9 +179,6 @@ namespace YooAsset.Editor public static List GetActiveRuleNames() { - if (_setting == null) - LoadSettingData(); - List names = new List(); foreach (var pair in _cacheActiveRuleTypes) { @@ -199,9 +191,6 @@ namespace YooAsset.Editor } public static List GetAddressRuleNames() { - if (_setting == null) - LoadSettingData(); - List names = new List(); foreach (var pair in _cacheAddressRuleTypes) { @@ -214,9 +203,6 @@ namespace YooAsset.Editor } public static List GetPackRuleNames() { - if (_setting == null) - LoadSettingData(); - List names = new List(); foreach (var pair in _cachePackRuleTypes) { @@ -229,9 +215,6 @@ namespace YooAsset.Editor } public static List GetFilterRuleNames() { - if (_setting == null) - LoadSettingData(); - List names = new List(); foreach (var pair in _cacheFilterRuleTypes) { diff --git a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/AssetBundleCollectorWindow.cs b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/AssetBundleCollectorWindow.cs index 094e9a84..839860cb 100644 --- a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/AssetBundleCollectorWindow.cs +++ b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/AssetBundleCollectorWindow.cs @@ -12,7 +12,7 @@ namespace YooAsset.Editor public class AssetBundleCollectorWindow : EditorWindow { [MenuItem("YooAsset/AssetBundle Collector", false, 101)] - public static void ShowExample() + public static void OpenWindow() { AssetBundleCollectorWindow window = GetWindow("资源包收集工具", true, WindowsDefine.DockedWindowTypes); window.minSize = new Vector2(800, 600); @@ -148,6 +148,7 @@ namespace YooAsset.Editor { selectPackage.PackageName = evt.newValue; AssetBundleCollectorSettingData.ModifyPackage(selectPackage); + FillPackageViewData(); } }); @@ -160,6 +161,7 @@ namespace YooAsset.Editor { selectPackage.PackageDesc = evt.newValue; AssetBundleCollectorSettingData.ModifyPackage(selectPackage); + FillPackageViewData(); } }); diff --git a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/DefaultPackRule.cs b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/DefaultPackRule.cs index 563d1e9c..72eef45c 100644 --- a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/DefaultPackRule.cs +++ b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/DefaultPackRule.cs @@ -60,8 +60,6 @@ namespace YooAsset.Editor [DisplayName("资源包名: 父类文件夹路径")] public class PackDirectory : IPackRule { - public static PackDirectory StaticPackRule = new PackDirectory(); - PackRuleResult IPackRule.GetPackRuleResult(PackRuleData data) { string bundleName = Path.GetDirectoryName(data.AssetPath); diff --git a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/DefaultShareAssetPackRule.cs b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/DefaultShareAssetPackRule.cs new file mode 100644 index 00000000..c861e6fb --- /dev/null +++ b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/DefaultShareAssetPackRule.cs @@ -0,0 +1,16 @@ +using System; +using System.IO; +using UnityEditor; + +namespace YooAsset.Editor +{ + public class DefaultShareAssetPackRule : IShareAssetPackRule + { + public PackRuleResult GetPackRuleResult(string assetPath) + { + string bundleName = Path.GetDirectoryName(assetPath); + PackRuleResult result = new PackRuleResult(bundleName, DefaultPackRule.AssetBundleFileExtension); + return result; + } + } +} \ No newline at end of file diff --git a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/DefaultShareAssetPackRule.cs.meta b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/DefaultShareAssetPackRule.cs.meta new file mode 100644 index 00000000..61e38b2a --- /dev/null +++ b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/DefaultShareAssetPackRule.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3b8606481370397489cb3aa21e726d9a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/IShareAssetPackRule.cs b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/IShareAssetPackRule.cs new file mode 100644 index 00000000..548bc5e9 --- /dev/null +++ b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/IShareAssetPackRule.cs @@ -0,0 +1,14 @@ + +namespace YooAsset.Editor +{ + /// + /// 共享资源的打包规则 + /// + public interface IShareAssetPackRule + { + /// + /// 获取打包规则结果 + /// + PackRuleResult GetPackRuleResult(string assetPath); + } +} \ No newline at end of file diff --git a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/IShareAssetPackRule.cs.meta b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/IShareAssetPackRule.cs.meta new file mode 100644 index 00000000..4fa19902 --- /dev/null +++ b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleCollector/IShareAssetPackRule.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1ed930b0cc1db1742b0a131ca476bd82 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleDebugger/AssetBundleDebuggerWindow.cs b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleDebugger/AssetBundleDebuggerWindow.cs index 19a30127..820edebe 100644 --- a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleDebugger/AssetBundleDebuggerWindow.cs +++ b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleDebugger/AssetBundleDebuggerWindow.cs @@ -13,7 +13,7 @@ namespace YooAsset.Editor public class AssetBundleDebuggerWindow : EditorWindow { [MenuItem("YooAsset/AssetBundle Debugger", false, 104)] - public static void ShowExample() + public static void OpenWindow() { AssetBundleDebuggerWindow wnd = GetWindow("资源包调试工具", true, WindowsDefine.DockedWindowTypes); wnd.minSize = new Vector2(800, 600); diff --git a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleReporter/AssetBundleReporterWindow.cs b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleReporter/AssetBundleReporterWindow.cs index 15009da1..92d945ab 100644 --- a/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleReporter/AssetBundleReporterWindow.cs +++ b/Assets/TEngine/Editor/Resource/YooAsset/AssetBundleReporter/AssetBundleReporterWindow.cs @@ -10,7 +10,7 @@ namespace YooAsset.Editor public class AssetBundleReporterWindow : EditorWindow { [MenuItem("YooAsset/AssetBundle Reporter", false, 103)] - public static void ShowExample() + public static void OpenWindow() { AssetBundleReporterWindow window = GetWindow("资源包报告工具", true, WindowsDefine.DockedWindowTypes); window.minSize = new Vector2(800, 600); diff --git a/Assets/TEngine/Editor/Resource/YooAsset/HomePage.cs b/Assets/TEngine/Editor/Resource/YooAsset/HomePage.cs new file mode 100644 index 00000000..3f704dfd --- /dev/null +++ b/Assets/TEngine/Editor/Resource/YooAsset/HomePage.cs @@ -0,0 +1,17 @@ +#if UNITY_2019_4_OR_NEWER +using System; +using UnityEditor; +using UnityEngine; + +namespace YooAsset.Editor +{ + internal class HomePageWindow + { + [MenuItem("YooAsset/Home Page", false, 1)] + public static void OpenWindow() + { + Application.OpenURL("https://www.yooasset.com/"); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/TEngine/Editor/Resource/YooAsset/HomePage.cs.meta b/Assets/TEngine/Editor/Resource/YooAsset/HomePage.cs.meta new file mode 100644 index 00000000..07c45c34 --- /dev/null +++ b/Assets/TEngine/Editor/Resource/YooAsset/HomePage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 901fc6964e7d483428830e2681899473 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TEngine/Editor/Resource/YooAsset/ShaderVariantCollector/ShaderVariantCollectorSetting.cs b/Assets/TEngine/Editor/Resource/YooAsset/ShaderVariantCollector/ShaderVariantCollectorSetting.cs index 658cb1a7..135031bf 100644 --- a/Assets/TEngine/Editor/Resource/YooAsset/ShaderVariantCollector/ShaderVariantCollectorSetting.cs +++ b/Assets/TEngine/Editor/Resource/YooAsset/ShaderVariantCollector/ShaderVariantCollectorSetting.cs @@ -2,6 +2,7 @@ namespace YooAsset.Editor { + [CreateAssetMenu(fileName = "ShaderVariantCollectorSetting", menuName = "YooAsset/Create ShaderVariant Collector Settings")] public class ShaderVariantCollectorSetting : ScriptableObject { /// diff --git a/Assets/TEngine/Editor/Resource/YooAsset/ShaderVariantCollector/ShaderVariantCollectorSettingData.cs b/Assets/TEngine/Editor/Resource/YooAsset/ShaderVariantCollector/ShaderVariantCollectorSettingData.cs index 34a5374a..7b097cfd 100644 --- a/Assets/TEngine/Editor/Resource/YooAsset/ShaderVariantCollector/ShaderVariantCollectorSettingData.cs +++ b/Assets/TEngine/Editor/Resource/YooAsset/ShaderVariantCollector/ShaderVariantCollectorSettingData.cs @@ -1,7 +1,6 @@ using System; using System.Collections; using System.Collections.Generic; -using System.Linq; using UnityEngine; using UnityEditor; @@ -20,6 +19,11 @@ namespace YooAsset.Editor } } + /// + /// 配置数据是否被修改 + /// + public static bool IsDirty { set; get; } = false; + /// /// 加载配置文件 /// @@ -35,6 +39,7 @@ namespace YooAsset.Editor { if (Setting != null) { + IsDirty = false; EditorUtility.SetDirty(Setting); AssetDatabase.SaveAssets(); Debug.Log($"{nameof(ShaderVariantCollectorSetting)}.asset is saved!"); diff --git a/Assets/TEngine/Editor/Resource/YooAsset/ShaderVariantCollector/ShaderVariantCollectorWindow.cs b/Assets/TEngine/Editor/Resource/YooAsset/ShaderVariantCollector/ShaderVariantCollectorWindow.cs index da6204b7..a1f39c2b 100644 --- a/Assets/TEngine/Editor/Resource/YooAsset/ShaderVariantCollector/ShaderVariantCollectorWindow.cs +++ b/Assets/TEngine/Editor/Resource/YooAsset/ShaderVariantCollector/ShaderVariantCollectorWindow.cs @@ -12,7 +12,7 @@ namespace YooAsset.Editor public class ShaderVariantCollectorWindow : EditorWindow { [MenuItem("YooAsset/ShaderVariant Collector", false, 201)] - public static void ShowExample() + public static void OpenWindow() { ShaderVariantCollectorWindow window = GetWindow("着色器变种收集工具", true, WindowsDefine.DockedWindowTypes); window.minSize = new Vector2(800, 600); @@ -20,6 +20,7 @@ namespace YooAsset.Editor private List _packageNames; + private Button _saveButton; private Button _collectButton; private TextField _collectOutputField; private Label _currentShaderCountField; @@ -40,6 +41,10 @@ namespace YooAsset.Editor visualAsset.CloneTree(root); + // 配置保存按钮 + _saveButton = root.Q