123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- using System;
- using System.IO;
- using UnityEditor;
- namespace YooAsset.Editor
- {
- public class DefaultPackRule
- {
- /// <summary>
- /// AssetBundle文件的后缀名
- /// </summary>
- public const string AssetBundleFileExtension = "bundle";
- /// <summary>
- /// 原生文件的后缀名
- /// </summary>
- public const string RawFileExtension = "rawfile";
- /// <summary>
- /// Unity着色器资源包名称
- /// </summary>
- public const string ShadersBundleName = "unityshaders";
- public static PackRuleResult CreateShadersPackRuleResult()
- {
- PackRuleResult result = new PackRuleResult(ShadersBundleName, AssetBundleFileExtension);
- return result;
- }
- }
- /// <summary>
- /// 以文件路径作为资源包名
- /// 注意:每个文件独自打资源包
- /// 例如:"Assets/UIPanel/Shop/Image/backgroud.png" --> "assets_uipanel_shop_image_backgroud.bundle"
- /// 例如:"Assets/UIPanel/Shop/View/main.prefab" --> "assets_uipanel_shop_view_main.bundle"
- /// </summary>
- [DisplayName("资源包名: 文件路径")]
- public class PackSeparately : IPackRule
- {
- PackRuleResult IPackRule.GetPackRuleResult(PackRuleData data)
- {
- string bundleName = PathUtility.RemoveExtension(data.AssetPath);
- PackRuleResult result = new PackRuleResult(bundleName, DefaultPackRule.AssetBundleFileExtension);
- return result;
- }
- bool IPackRule.IsRawFilePackRule()
- {
- return false;
- }
- }
- /// <summary>
- /// 以父类文件夹路径作为资源包名
- /// 注意:文件夹下所有文件打进一个资源包
- /// 例如:"Assets/UIPanel/Shop/Image/backgroud.png" --> "assets_uipanel_shop_image.bundle"
- /// 例如:"Assets/UIPanel/Shop/View/main.prefab" --> "assets_uipanel_shop_view.bundle"
- /// </summary>
- [DisplayName("资源包名: 父类文件夹路径")]
- public class PackDirectory : IPackRule
- {
- PackRuleResult IPackRule.GetPackRuleResult(PackRuleData data)
- {
- string bundleName = Path.GetDirectoryName(data.AssetPath);
- PackRuleResult result = new PackRuleResult(bundleName, DefaultPackRule.AssetBundleFileExtension);
- return result;
- }
- bool IPackRule.IsRawFilePackRule()
- {
- return false;
- }
- }
- /// <summary>
- /// 以收集器路径下顶级文件夹为资源包名
- /// 注意:文件夹下所有文件打进一个资源包
- /// 例如:收集器路径为 "Assets/UIPanel"
- /// 例如:"Assets/UIPanel/Shop/Image/backgroud.png" --> "assets_uipanel_shop.bundle"
- /// 例如:"Assets/UIPanel/Shop/View/main.prefab" --> "assets_uipanel_shop.bundle"
- /// </summary>
- [DisplayName("资源包名: 收集器下顶级文件夹路径")]
- public class PackTopDirectory : IPackRule
- {
- PackRuleResult IPackRule.GetPackRuleResult(PackRuleData data)
- {
- string assetPath = data.AssetPath.Replace(data.CollectPath, string.Empty);
- assetPath = assetPath.TrimStart('/');
- string[] splits = assetPath.Split('/');
- if (splits.Length > 0)
- {
- if (Path.HasExtension(splits[0]))
- throw new Exception($"Not found root directory : {assetPath}");
- string bundleName = $"{data.CollectPath}/{splits[0]}";
- PackRuleResult result = new PackRuleResult(bundleName, DefaultPackRule.AssetBundleFileExtension);
- return result;
- }
- else
- {
- throw new Exception($"Not found root directory : {assetPath}");
- }
- }
- bool IPackRule.IsRawFilePackRule()
- {
- return false;
- }
- }
- /// <summary>
- /// 以收集器路径作为资源包名
- /// 注意:收集的所有文件打进一个资源包
- /// </summary>
- [DisplayName("资源包名: 收集器路径")]
- public class PackCollector : IPackRule
- {
- PackRuleResult IPackRule.GetPackRuleResult(PackRuleData data)
- {
- string bundleName;
- string collectPath = data.CollectPath;
- if (AssetDatabase.IsValidFolder(collectPath))
- {
- bundleName = collectPath;
- }
- else
- {
- bundleName = PathUtility.RemoveExtension(collectPath);
- }
- PackRuleResult result = new PackRuleResult(bundleName, DefaultPackRule.AssetBundleFileExtension);
- return result;
- }
- bool IPackRule.IsRawFilePackRule()
- {
- return false;
- }
- }
- /// <summary>
- /// 以分组名称作为资源包名
- /// 注意:收集的所有文件打进一个资源包
- /// </summary>
- [DisplayName("资源包名: 分组名称")]
- public class PackGroup : IPackRule
- {
- PackRuleResult IPackRule.GetPackRuleResult(PackRuleData data)
- {
- string bundleName = data.GroupName;
- PackRuleResult result = new PackRuleResult(bundleName, DefaultPackRule.AssetBundleFileExtension);
- return result;
- }
- bool IPackRule.IsRawFilePackRule()
- {
- return false;
- }
- }
- /// <summary>
- /// 打包原生文件
- /// </summary>
- [DisplayName("打包原生文件")]
- public class PackRawFile : IPackRule
- {
- PackRuleResult IPackRule.GetPackRuleResult(PackRuleData data)
- {
- string bundleName = data.AssetPath;
- PackRuleResult result = new PackRuleResult(bundleName, DefaultPackRule.RawFileExtension);
- return result;
- }
- bool IPackRule.IsRawFilePackRule()
- {
- return true;
- }
- }
- /// <summary>
- /// 打包着色器变种集合
- /// </summary>
- [DisplayName("打包着色器变种集合文件")]
- public class PackShaderVariants : IPackRule
- {
- public PackRuleResult GetPackRuleResult(PackRuleData data)
- {
- return DefaultPackRule.CreateShadersPackRuleResult();
- }
- bool IPackRule.IsRawFilePackRule()
- {
- return false;
- }
- }
- }
|