DefaultPackRule.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. using System;
  2. using System.IO;
  3. using UnityEditor;
  4. namespace YooAsset.Editor
  5. {
  6. /// <summary>
  7. /// 以文件路径作为资源包名
  8. /// 注意:每个文件独自打资源包
  9. /// 例如:收集器路径为 "Assets/UIPanel"
  10. /// 例如:"Assets/UIPanel/Shop/Image/backgroud.png" --> "assets/uipanel/shop/image/backgroud.bundle"
  11. /// 例如:"Assets/UIPanel/Shop/View/main.prefab" --> "assets/uipanel/shop/view/main.bundle"
  12. /// </summary>
  13. public class PackSeparately : IPackRule
  14. {
  15. string IPackRule.GetBundleName(PackRuleData data)
  16. {
  17. string bundleName = StringUtility.RemoveExtension(data.AssetPath);
  18. return EditorTools.GetRegularPath(bundleName).Replace('/', '_');
  19. }
  20. }
  21. /// <summary>
  22. /// 以父类文件夹路径作为资源包名
  23. /// 注意:文件夹下所有文件打进一个资源包
  24. /// 例如:收集器路径为 "Assets/UIPanel"
  25. /// 例如:"Assets/UIPanel/Shop/Image/backgroud.png" --> "assets/uipanel/shop/image.bundle"
  26. /// 例如:"Assets/UIPanel/Shop/View/main.prefab" --> "assets/uipanel/shop/view.bundle"
  27. /// </summary>
  28. public class PackDirectory : IPackRule
  29. {
  30. public static PackDirectory StaticPackRule = new PackDirectory();
  31. string IPackRule.GetBundleName(PackRuleData data)
  32. {
  33. string bundleName = Path.GetDirectoryName(data.AssetPath);
  34. return EditorTools.GetRegularPath(bundleName).Replace('/', '_');
  35. }
  36. }
  37. /// <summary>
  38. /// 以收集器路径下顶级文件夹为资源包名
  39. /// 注意:文件夹下所有文件打进一个资源包
  40. /// 例如:收集器路径为 "Assets/UIPanel"
  41. /// 例如:"Assets/UIPanel/Shop/Image/backgroud.png" --> "assets/uipanel/shop.bundle"
  42. /// 例如:"Assets/UIPanel/Shop/View/main.prefab" --> "assets/uipanel/shop.bundle"
  43. /// </summary>
  44. public class PackTopDirectory : IPackRule
  45. {
  46. string IPackRule.GetBundleName(PackRuleData data)
  47. {
  48. string assetPath = data.AssetPath.Replace(data.CollectPath, string.Empty);
  49. assetPath = assetPath.TrimStart('/');
  50. string[] splits = assetPath.Split('/');
  51. if (splits.Length > 0)
  52. {
  53. if (Path.HasExtension(splits[0]))
  54. throw new Exception($"Not found root directory : {assetPath}");
  55. string bundleName = $"{data.CollectPath}/{splits[0]}";
  56. return EditorTools.GetRegularPath(bundleName).Replace('/', '_');
  57. }
  58. else
  59. {
  60. throw new Exception($"Not found root directory : {assetPath}");
  61. }
  62. }
  63. }
  64. /// <summary>
  65. /// 以收集器路径作为资源包名
  66. /// 注意:收集的所有文件打进一个资源包
  67. /// </summary>
  68. public class PackCollector : IPackRule
  69. {
  70. string IPackRule.GetBundleName(PackRuleData data)
  71. {
  72. string bundleName = StringUtility.RemoveExtension(data.CollectPath);
  73. return EditorTools.GetRegularPath(bundleName).Replace('/', '_');
  74. }
  75. }
  76. /// <summary>
  77. /// 以分组名称作为资源包名
  78. /// 注意:收集的所有文件打进一个资源包
  79. /// </summary>
  80. public class PackGroup : IPackRule
  81. {
  82. string IPackRule.GetBundleName(PackRuleData data)
  83. {
  84. return data.GroupName;
  85. }
  86. }
  87. /// <summary>
  88. /// 原生文件打包模式
  89. /// 注意:原生文件打包支持:图片,音频,视频,文本
  90. /// </summary>
  91. public class PackRawFile : IPackRule
  92. {
  93. string IPackRule.GetBundleName(PackRuleData data)
  94. {
  95. string extension = StringUtility.RemoveFirstChar(Path.GetExtension(data.AssetPath));
  96. if (extension == EAssetFileExtension.unity.ToString() || extension == EAssetFileExtension.prefab.ToString() ||
  97. extension == EAssetFileExtension.mat.ToString() || extension == EAssetFileExtension.controller.ToString() ||
  98. extension == EAssetFileExtension.fbx.ToString() || extension == EAssetFileExtension.anim.ToString() ||
  99. extension == EAssetFileExtension.shader.ToString())
  100. {
  101. throw new Exception($"{nameof(PackRawFile)} is not support file estension : {extension}");
  102. }
  103. // 注意:原生文件只支持无依赖关系的资源
  104. string[] depends = AssetDatabase.GetDependencies(data.AssetPath, true);
  105. if (depends.Length != 1)
  106. throw new Exception($"{nameof(PackRawFile)} is not support estension : {extension}");
  107. string bundleName = StringUtility.RemoveExtension(data.AssetPath);
  108. return EditorTools.GetRegularPath(bundleName).Replace('/', '_');
  109. }
  110. }
  111. /// <summary>
  112. /// 着色器变种收集文件
  113. /// </summary>
  114. public class PackShaderVariants : IPackRule
  115. {
  116. public string GetBundleName(PackRuleData data)
  117. {
  118. return YooAssetSettings.UnityShadersBundleName;
  119. }
  120. }
  121. }