BundleInfo.cs 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. using System.IO;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. namespace YooAsset
  5. {
  6. internal class BundleInfo
  7. {
  8. public enum ELoadMode
  9. {
  10. None,
  11. LoadFromDelivery,
  12. LoadFromStreaming,
  13. LoadFromCache,
  14. LoadFromRemote,
  15. LoadFromEditor,
  16. }
  17. private readonly ResourceAssist _assist;
  18. /// <summary>
  19. /// 资源包对象
  20. /// </summary>
  21. public readonly PackageBundle Bundle;
  22. /// <summary>
  23. /// 资源包加载模式
  24. /// </summary>
  25. public readonly ELoadMode LoadMode;
  26. /// <summary>
  27. /// 远端下载地址
  28. /// </summary>
  29. public string RemoteMainURL { private set; get; }
  30. /// <summary>
  31. /// 远端下载备用地址
  32. /// </summary>
  33. public string RemoteFallbackURL { private set; get; }
  34. /// <summary>
  35. /// 分发资源文件路径
  36. /// </summary>
  37. public string DeliveryFilePath { private set; get; }
  38. /// <summary>
  39. /// 注意:该字段只用于帮助编辑器下的模拟模式。
  40. /// </summary>
  41. public string[] IncludeAssetsInEditor;
  42. private BundleInfo()
  43. {
  44. }
  45. public BundleInfo(ResourceAssist assist, PackageBundle bundle, ELoadMode loadMode, string mainURL, string fallbackURL)
  46. {
  47. _assist = assist;
  48. Bundle = bundle;
  49. LoadMode = loadMode;
  50. RemoteMainURL = mainURL;
  51. RemoteFallbackURL = fallbackURL;
  52. DeliveryFilePath = string.Empty;
  53. }
  54. public BundleInfo(ResourceAssist assist, PackageBundle bundle, ELoadMode loadMode, string deliveryFilePath)
  55. {
  56. _assist = assist;
  57. Bundle = bundle;
  58. LoadMode = loadMode;
  59. RemoteMainURL = string.Empty;
  60. RemoteFallbackURL = string.Empty;
  61. DeliveryFilePath = deliveryFilePath;
  62. }
  63. public BundleInfo(ResourceAssist assist, PackageBundle bundle, ELoadMode loadMode)
  64. {
  65. _assist = assist;
  66. Bundle = bundle;
  67. LoadMode = loadMode;
  68. RemoteMainURL = string.Empty;
  69. RemoteFallbackURL = string.Empty;
  70. DeliveryFilePath = string.Empty;
  71. }
  72. #region Cache
  73. public bool IsCached()
  74. {
  75. return _assist.Cache.IsCached(Bundle.CacheGUID);
  76. }
  77. public void CacheRecord()
  78. {
  79. string infoFilePath = CachedInfoFilePath;
  80. string dataFilePath = CachedDataFilePath;
  81. string dataFileCRC = Bundle.FileCRC;
  82. long dataFileSize = Bundle.FileSize;
  83. var wrapper = new CacheManager.RecordWrapper(infoFilePath, dataFilePath, dataFileCRC, dataFileSize);
  84. _assist.Cache.Record(Bundle.CacheGUID, wrapper);
  85. }
  86. public void CacheDiscard()
  87. {
  88. _assist.Cache.Discard(Bundle.CacheGUID);
  89. }
  90. public EVerifyResult VerifySelf()
  91. {
  92. return CacheHelper.VerifyingRecordFile(_assist.Cache, Bundle.CacheGUID);
  93. }
  94. #endregion
  95. #region Persistent
  96. public string CachedDataFilePath
  97. {
  98. get
  99. {
  100. return _assist.Persistent.GetCachedDataFilePath(Bundle);
  101. }
  102. }
  103. public string CachedInfoFilePath
  104. {
  105. get
  106. {
  107. return _assist.Persistent.GetCachedInfoFilePath(Bundle);
  108. }
  109. }
  110. public string TempDataFilePath
  111. {
  112. get
  113. {
  114. return _assist.Persistent.GetTempDataFilePath(Bundle);
  115. }
  116. }
  117. public string BuildinFilePath
  118. {
  119. get
  120. {
  121. return _assist.Persistent.GetBuildinFilePath(Bundle);
  122. }
  123. }
  124. #endregion
  125. #region Download
  126. public DownloaderBase CreateDownloader(int failedTryAgain, int timeout = 60)
  127. {
  128. return _assist.Download.CreateDownload(this, failedTryAgain, timeout);
  129. }
  130. public DownloaderBase CreateUnpacker(int failedTryAgain, int timeout = 60)
  131. {
  132. var unpackBundleInfo = ConvertToUnpackInfo();
  133. return _assist.Download.CreateDownload(unpackBundleInfo, failedTryAgain, timeout);
  134. }
  135. #endregion
  136. #region AssetBundle
  137. internal AssetBundle LoadAssetBundle(string fileLoadPath, out Stream managedStream)
  138. {
  139. return _assist.Loader.LoadAssetBundle(this, fileLoadPath, out managedStream);
  140. }
  141. internal AssetBundleCreateRequest LoadAssetBundleAsync(string fileLoadPath, out Stream managedStream)
  142. {
  143. return _assist.Loader.LoadAssetBundleAsync(this, fileLoadPath, out managedStream);
  144. }
  145. internal AssetBundle LoadDeliveryAssetBundle(string fileLoadPath)
  146. {
  147. return _assist.Loader.LoadDeliveryAssetBundle(this, fileLoadPath);
  148. }
  149. internal AssetBundleCreateRequest LoadDeliveryAssetBundleAsync(string fileLoadPath)
  150. {
  151. return _assist.Loader.LoadDeliveryAssetBundleAsync(this, fileLoadPath);
  152. }
  153. #endregion
  154. /// <summary>
  155. /// 转换为解压BundleInfo
  156. /// </summary>
  157. private BundleInfo ConvertToUnpackInfo()
  158. {
  159. string streamingPath = PersistentHelper.ConvertToWWWPath(BuildinFilePath);
  160. BundleInfo newBundleInfo = new BundleInfo(_assist, Bundle, ELoadMode.LoadFromStreaming, streamingPath, streamingPath);
  161. return newBundleInfo;
  162. }
  163. /// <summary>
  164. /// 批量创建解压BundleInfo
  165. /// </summary>
  166. public static List<BundleInfo> CreateUnpackInfos(ResourceAssist assist, List<PackageBundle> unpackList)
  167. {
  168. List<BundleInfo> result = new List<BundleInfo>(unpackList.Count);
  169. foreach (var packageBundle in unpackList)
  170. {
  171. var bundleInfo = CreateUnpackInfo(assist, packageBundle);
  172. result.Add(bundleInfo);
  173. }
  174. return result;
  175. }
  176. private static BundleInfo CreateUnpackInfo(ResourceAssist assist, PackageBundle packageBundle)
  177. {
  178. string streamingPath = PersistentHelper.ConvertToWWWPath(assist.Persistent.GetBuildinFilePath(packageBundle));
  179. BundleInfo newBundleInfo = new BundleInfo(assist, packageBundle, ELoadMode.LoadFromStreaming, streamingPath, streamingPath);
  180. return newBundleInfo;
  181. }
  182. /// <summary>
  183. /// 创建导入BundleInfo
  184. /// </summary>
  185. public static BundleInfo CreateImportInfo(ResourceAssist assist, PackageBundle packageBundle, string filePath)
  186. {
  187. // 注意:我们把本地文件路径指定为远端下载地址
  188. string persistentPath = PersistentHelper.ConvertToWWWPath(filePath);
  189. BundleInfo bundleInfo = new BundleInfo(assist, packageBundle, BundleInfo.ELoadMode.None, persistentPath, persistentPath);
  190. return bundleInfo;
  191. }
  192. }
  193. }