DefaultPackRule.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. using System;
  2. using System.IO;
  3. using UnityEditor;
  4. namespace YooAsset.Editor
  5. {
  6. public class DefaultPackRule
  7. {
  8. /// <summary>
  9. /// AssetBundle文件的后缀名
  10. /// </summary>
  11. public const string AssetBundleFileExtension = "bundle";
  12. /// <summary>
  13. /// 原生文件的后缀名
  14. /// </summary>
  15. public const string RawFileExtension = "rawfile";
  16. /// <summary>
  17. /// Unity着色器资源包名称
  18. /// </summary>
  19. public const string ShadersBundleName = "unityshaders";
  20. public static PackRuleResult CreateShadersPackRuleResult()
  21. {
  22. PackRuleResult result = new PackRuleResult(ShadersBundleName, AssetBundleFileExtension);
  23. return result;
  24. }
  25. }
  26. /// <summary>
  27. /// 以文件路径作为资源包名
  28. /// 注意:每个文件独自打资源包
  29. /// 例如:"Assets/UIPanel/Shop/Image/backgroud.png" --> "assets_uipanel_shop_image_backgroud.bundle"
  30. /// 例如:"Assets/UIPanel/Shop/View/main.prefab" --> "assets_uipanel_shop_view_main.bundle"
  31. /// </summary>
  32. [DisplayName("资源包名: 文件路径")]
  33. public class PackSeparately : IPackRule
  34. {
  35. PackRuleResult IPackRule.GetPackRuleResult(PackRuleData data)
  36. {
  37. string bundleName = PathUtility.RemoveExtension(data.AssetPath);
  38. PackRuleResult result = new PackRuleResult(bundleName, DefaultPackRule.AssetBundleFileExtension);
  39. return result;
  40. }
  41. bool IPackRule.IsRawFilePackRule()
  42. {
  43. return false;
  44. }
  45. }
  46. /// <summary>
  47. /// 以父类文件夹路径作为资源包名
  48. /// 注意:文件夹下所有文件打进一个资源包
  49. /// 例如:"Assets/UIPanel/Shop/Image/backgroud.png" --> "assets_uipanel_shop_image.bundle"
  50. /// 例如:"Assets/UIPanel/Shop/View/main.prefab" --> "assets_uipanel_shop_view.bundle"
  51. /// </summary>
  52. [DisplayName("资源包名: 父类文件夹路径")]
  53. public class PackDirectory : IPackRule
  54. {
  55. PackRuleResult IPackRule.GetPackRuleResult(PackRuleData data)
  56. {
  57. string bundleName = Path.GetDirectoryName(data.AssetPath);
  58. PackRuleResult result = new PackRuleResult(bundleName, DefaultPackRule.AssetBundleFileExtension);
  59. return result;
  60. }
  61. bool IPackRule.IsRawFilePackRule()
  62. {
  63. return false;
  64. }
  65. }
  66. /// <summary>
  67. /// 以收集器路径下顶级文件夹为资源包名
  68. /// 注意:文件夹下所有文件打进一个资源包
  69. /// 例如:收集器路径为 "Assets/UIPanel"
  70. /// 例如:"Assets/UIPanel/Shop/Image/backgroud.png" --> "assets_uipanel_shop.bundle"
  71. /// 例如:"Assets/UIPanel/Shop/View/main.prefab" --> "assets_uipanel_shop.bundle"
  72. /// </summary>
  73. [DisplayName("资源包名: 收集器下顶级文件夹路径")]
  74. public class PackTopDirectory : IPackRule
  75. {
  76. PackRuleResult IPackRule.GetPackRuleResult(PackRuleData data)
  77. {
  78. string assetPath = data.AssetPath.Replace(data.CollectPath, string.Empty);
  79. assetPath = assetPath.TrimStart('/');
  80. string[] splits = assetPath.Split('/');
  81. if (splits.Length > 0)
  82. {
  83. if (Path.HasExtension(splits[0]))
  84. throw new Exception($"Not found root directory : {assetPath}");
  85. string bundleName = $"{data.CollectPath}/{splits[0]}";
  86. PackRuleResult result = new PackRuleResult(bundleName, DefaultPackRule.AssetBundleFileExtension);
  87. return result;
  88. }
  89. else
  90. {
  91. throw new Exception($"Not found root directory : {assetPath}");
  92. }
  93. }
  94. bool IPackRule.IsRawFilePackRule()
  95. {
  96. return false;
  97. }
  98. }
  99. /// <summary>
  100. /// 以收集器路径作为资源包名
  101. /// 注意:收集的所有文件打进一个资源包
  102. /// </summary>
  103. [DisplayName("资源包名: 收集器路径")]
  104. public class PackCollector : IPackRule
  105. {
  106. PackRuleResult IPackRule.GetPackRuleResult(PackRuleData data)
  107. {
  108. string bundleName;
  109. string collectPath = data.CollectPath;
  110. if (AssetDatabase.IsValidFolder(collectPath))
  111. {
  112. bundleName = collectPath;
  113. }
  114. else
  115. {
  116. bundleName = PathUtility.RemoveExtension(collectPath);
  117. }
  118. PackRuleResult result = new PackRuleResult(bundleName, DefaultPackRule.AssetBundleFileExtension);
  119. return result;
  120. }
  121. bool IPackRule.IsRawFilePackRule()
  122. {
  123. return false;
  124. }
  125. }
  126. /// <summary>
  127. /// 以分组名称作为资源包名
  128. /// 注意:收集的所有文件打进一个资源包
  129. /// </summary>
  130. [DisplayName("资源包名: 分组名称")]
  131. public class PackGroup : IPackRule
  132. {
  133. PackRuleResult IPackRule.GetPackRuleResult(PackRuleData data)
  134. {
  135. string bundleName = data.GroupName;
  136. PackRuleResult result = new PackRuleResult(bundleName, DefaultPackRule.AssetBundleFileExtension);
  137. return result;
  138. }
  139. bool IPackRule.IsRawFilePackRule()
  140. {
  141. return false;
  142. }
  143. }
  144. /// <summary>
  145. /// 打包原生文件
  146. /// </summary>
  147. [DisplayName("打包原生文件")]
  148. public class PackRawFile : IPackRule
  149. {
  150. PackRuleResult IPackRule.GetPackRuleResult(PackRuleData data)
  151. {
  152. string bundleName = data.AssetPath;
  153. PackRuleResult result = new PackRuleResult(bundleName, DefaultPackRule.RawFileExtension);
  154. return result;
  155. }
  156. bool IPackRule.IsRawFilePackRule()
  157. {
  158. return true;
  159. }
  160. }
  161. /// <summary>
  162. /// 打包着色器变种集合
  163. /// </summary>
  164. [DisplayName("打包着色器变种集合文件")]
  165. public class PackShaderVariants : IPackRule
  166. {
  167. public PackRuleResult GetPackRuleResult(PackRuleData data)
  168. {
  169. return DefaultPackRule.CreateShadersPackRuleResult();
  170. }
  171. bool IPackRule.IsRawFilePackRule()
  172. {
  173. return false;
  174. }
  175. }
  176. }