YooAssetsExtension.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485
  1. using System;
  2. using System.Diagnostics;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. using UnityEngine.SceneManagement;
  6. namespace YooAsset
  7. {
  8. public static partial class YooAssets
  9. {
  10. private static ResourcePackage _defaultPackage;
  11. /// <summary>
  12. /// 设置默认的资源包
  13. /// </summary>
  14. public static void SetDefaultPackage(ResourcePackage package)
  15. {
  16. _defaultPackage = package;
  17. }
  18. #region 资源信息
  19. /// <summary>
  20. /// 是否需要从远端更新下载
  21. /// </summary>
  22. /// <param name="location">资源的定位地址</param>
  23. public static bool IsNeedDownloadFromRemote(string location)
  24. {
  25. DebugCheckDefaultPackageValid();
  26. return _defaultPackage.IsNeedDownloadFromRemote(location);
  27. }
  28. /// <summary>
  29. /// 是否需要从远端更新下载
  30. /// </summary>
  31. /// <param name="location">资源的定位地址</param>
  32. public static bool IsNeedDownloadFromRemote(AssetInfo assetInfo)
  33. {
  34. DebugCheckDefaultPackageValid();
  35. return _defaultPackage.IsNeedDownloadFromRemote(assetInfo);
  36. }
  37. /// <summary>
  38. /// 获取资源信息列表
  39. /// </summary>
  40. /// <param name="tag">资源标签</param>
  41. public static AssetInfo[] GetAssetInfos(string tag)
  42. {
  43. DebugCheckDefaultPackageValid();
  44. return _defaultPackage.GetAssetInfos(tag);
  45. }
  46. /// <summary>
  47. /// 获取资源信息列表
  48. /// </summary>
  49. /// <param name="tags">资源标签列表</param>
  50. public static AssetInfo[] GetAssetInfos(string[] tags)
  51. {
  52. DebugCheckDefaultPackageValid();
  53. return _defaultPackage.GetAssetInfos(tags);
  54. }
  55. /// <summary>
  56. /// 获取资源信息
  57. /// </summary>
  58. /// <param name="location">资源的定位地址</param>
  59. public static AssetInfo GetAssetInfo(string location)
  60. {
  61. DebugCheckDefaultPackageValid();
  62. return _defaultPackage.GetAssetInfo(location);
  63. }
  64. /// <summary>
  65. /// 检查资源定位地址是否有效
  66. /// </summary>
  67. /// <param name="location">资源的定位地址</param>
  68. public static bool CheckLocationValid(string location)
  69. {
  70. DebugCheckDefaultPackageValid();
  71. return _defaultPackage.CheckLocationValid(location);
  72. }
  73. #endregion
  74. #region 原生文件
  75. /// <summary>
  76. /// 同步加载原生文件
  77. /// </summary>
  78. /// <param name="assetInfo">资源信息</param>
  79. public static RawFileOperationHandle LoadRawFileSync(AssetInfo assetInfo)
  80. {
  81. DebugCheckDefaultPackageValid();
  82. return _defaultPackage.LoadRawFileSync(assetInfo);
  83. }
  84. /// <summary>
  85. /// 同步加载原生文件
  86. /// </summary>
  87. /// <param name="location">资源的定位地址</param>
  88. public static RawFileOperationHandle LoadRawFileSync(string location)
  89. {
  90. DebugCheckDefaultPackageValid();
  91. return _defaultPackage.LoadRawFileSync(location);
  92. }
  93. /// <summary>
  94. /// 异步加载原生文件
  95. /// </summary>
  96. /// <param name="assetInfo">资源信息</param>
  97. public static RawFileOperationHandle LoadRawFileAsync(AssetInfo assetInfo)
  98. {
  99. DebugCheckDefaultPackageValid();
  100. return _defaultPackage.LoadRawFileAsync(assetInfo);
  101. }
  102. /// <summary>
  103. /// 异步加载原生文件
  104. /// </summary>
  105. /// <param name="location">资源的定位地址</param>
  106. public static RawFileOperationHandle LoadRawFileAsync(string location)
  107. {
  108. DebugCheckDefaultPackageValid();
  109. return _defaultPackage.LoadRawFileAsync(location);
  110. }
  111. #endregion
  112. #region 场景加载
  113. /// <summary>
  114. /// 异步加载场景
  115. /// </summary>
  116. /// <param name="location">场景的定位地址</param>
  117. /// <param name="sceneMode">场景加载模式</param>
  118. /// <param name="suspendLoad">场景加载到90%自动挂起</param>
  119. /// <param name="priority">优先级</param>
  120. public static SceneOperationHandle LoadSceneAsync(string location, LoadSceneMode sceneMode = LoadSceneMode.Single, bool suspendLoad = false, int priority = 100)
  121. {
  122. DebugCheckDefaultPackageValid();
  123. return _defaultPackage.LoadSceneAsync(location, sceneMode, suspendLoad, priority);
  124. }
  125. /// <summary>
  126. /// 异步加载场景
  127. /// </summary>
  128. /// <param name="assetInfo">场景的资源信息</param>
  129. /// <param name="sceneMode">场景加载模式</param>
  130. /// <param name="suspendLoad">场景加载到90%自动挂起</param>
  131. /// <param name="priority">优先级</param>
  132. public static SceneOperationHandle LoadSceneAsync(AssetInfo assetInfo, LoadSceneMode sceneMode = LoadSceneMode.Single, bool suspendLoad = false, int priority = 100)
  133. {
  134. DebugCheckDefaultPackageValid();
  135. return _defaultPackage.LoadSceneAsync(assetInfo, sceneMode, suspendLoad, priority);
  136. }
  137. #endregion
  138. #region 资源加载
  139. /// <summary>
  140. /// 同步加载资源对象
  141. /// </summary>
  142. /// <param name="assetInfo">资源信息</param>
  143. public static AssetOperationHandle LoadAssetSync(AssetInfo assetInfo)
  144. {
  145. DebugCheckDefaultPackageValid();
  146. return _defaultPackage.LoadAssetSync(assetInfo);
  147. }
  148. /// <summary>
  149. /// 同步加载资源对象
  150. /// </summary>
  151. /// <typeparam name="TObject">资源类型</typeparam>
  152. /// <param name="location">资源的定位地址</param>
  153. public static AssetOperationHandle LoadAssetSync<TObject>(string location) where TObject : UnityEngine.Object
  154. {
  155. DebugCheckDefaultPackageValid();
  156. return _defaultPackage.LoadAssetSync<TObject>(location);
  157. }
  158. /// <summary>
  159. /// 同步加载资源对象
  160. /// </summary>
  161. /// <param name="location">资源的定位地址</param>
  162. /// <param name="type">资源类型</param>
  163. public static AssetOperationHandle LoadAssetSync(string location, System.Type type)
  164. {
  165. DebugCheckDefaultPackageValid();
  166. return _defaultPackage.LoadAssetSync(location, type);
  167. }
  168. /// <summary>
  169. /// 异步加载资源对象
  170. /// </summary>
  171. /// <param name="assetInfo">资源信息</param>
  172. public static AssetOperationHandle LoadAssetAsync(AssetInfo assetInfo)
  173. {
  174. DebugCheckDefaultPackageValid();
  175. return _defaultPackage.LoadAssetAsync(assetInfo);
  176. }
  177. /// <summary>
  178. /// 异步加载资源对象
  179. /// </summary>
  180. /// <typeparam name="TObject">资源类型</typeparam>
  181. /// <param name="location">资源的定位地址</param>
  182. public static AssetOperationHandle LoadAssetAsync<TObject>(string location) where TObject : UnityEngine.Object
  183. {
  184. DebugCheckDefaultPackageValid();
  185. return _defaultPackage.LoadAssetAsync<TObject>(location);
  186. }
  187. /// <summary>
  188. /// 异步加载资源对象
  189. /// </summary>
  190. /// <param name="location">资源的定位地址</param>
  191. /// <param name="type">资源类型</param>
  192. public static AssetOperationHandle LoadAssetAsync(string location, System.Type type)
  193. {
  194. DebugCheckDefaultPackageValid();
  195. return _defaultPackage.LoadAssetAsync(location, type);
  196. }
  197. #endregion
  198. #region 资源加载
  199. /// <summary>
  200. /// 同步加载子资源对象
  201. /// </summary>
  202. /// <param name="assetInfo">资源信息</param>
  203. public static SubAssetsOperationHandle LoadSubAssetsSync(AssetInfo assetInfo)
  204. {
  205. DebugCheckDefaultPackageValid();
  206. return _defaultPackage.LoadSubAssetsSync(assetInfo);
  207. }
  208. /// <summary>
  209. /// 同步加载子资源对象
  210. /// </summary>
  211. /// <typeparam name="TObject">资源类型</typeparam>
  212. /// <param name="location">资源的定位地址</param>
  213. public static SubAssetsOperationHandle LoadSubAssetsSync<TObject>(string location) where TObject : UnityEngine.Object
  214. {
  215. DebugCheckDefaultPackageValid();
  216. return _defaultPackage.LoadSubAssetsSync<TObject>(location);
  217. }
  218. /// <summary>
  219. /// 同步加载子资源对象
  220. /// </summary>
  221. /// <param name="location">资源的定位地址</param>
  222. /// <param name="type">子对象类型</param>
  223. public static SubAssetsOperationHandle LoadSubAssetsSync(string location, System.Type type)
  224. {
  225. DebugCheckDefaultPackageValid();
  226. return _defaultPackage.LoadSubAssetsSync(location, type);
  227. }
  228. /// <summary>
  229. /// 异步加载子资源对象
  230. /// </summary>
  231. /// <param name="assetInfo">资源信息</param>
  232. public static SubAssetsOperationHandle LoadSubAssetsAsync(AssetInfo assetInfo)
  233. {
  234. DebugCheckDefaultPackageValid();
  235. return _defaultPackage.LoadSubAssetsAsync(assetInfo);
  236. }
  237. /// <summary>
  238. /// 异步加载子资源对象
  239. /// </summary>
  240. /// <typeparam name="TObject">资源类型</typeparam>
  241. /// <param name="location">资源的定位地址</param>
  242. public static SubAssetsOperationHandle LoadSubAssetsAsync<TObject>(string location) where TObject : UnityEngine.Object
  243. {
  244. DebugCheckDefaultPackageValid();
  245. return _defaultPackage.LoadSubAssetsAsync<TObject>(location);
  246. }
  247. /// <summary>
  248. /// 异步加载子资源对象
  249. /// </summary>
  250. /// <param name="location">资源的定位地址</param>
  251. /// <param name="type">子对象类型</param>
  252. public static SubAssetsOperationHandle LoadSubAssetsAsync(string location, System.Type type)
  253. {
  254. DebugCheckDefaultPackageValid();
  255. return _defaultPackage.LoadSubAssetsAsync(location, type);
  256. }
  257. #endregion
  258. #region 资源加载
  259. /// <summary>
  260. /// 同步加载资源包内所有资源对象
  261. /// </summary>
  262. /// <param name="assetInfo">资源信息</param>
  263. public static AllAssetsOperationHandle LoadAllAssetsSync(AssetInfo assetInfo)
  264. {
  265. DebugCheckDefaultPackageValid();
  266. return _defaultPackage.LoadAllAssetsSync(assetInfo);
  267. }
  268. /// <summary>
  269. /// 同步加载资源包内所有资源对象
  270. /// </summary>
  271. /// <typeparam name="TObject">资源类型</typeparam>
  272. /// <param name="location">资源的定位地址</param>
  273. public static AllAssetsOperationHandle LoadAllAssetsSync<TObject>(string location) where TObject : UnityEngine.Object
  274. {
  275. DebugCheckDefaultPackageValid();
  276. return _defaultPackage.LoadAllAssetsSync<TObject>(location);
  277. }
  278. /// <summary>
  279. /// 同步加载资源包内所有资源对象
  280. /// </summary>
  281. /// <param name="location">资源的定位地址</param>
  282. /// <param name="type">子对象类型</param>
  283. public static AllAssetsOperationHandle LoadAllAssetsSync(string location, System.Type type)
  284. {
  285. DebugCheckDefaultPackageValid();
  286. return _defaultPackage.LoadAllAssetsSync(location, type);
  287. }
  288. /// <summary>
  289. /// 异步加载资源包内所有资源对象
  290. /// </summary>
  291. /// <param name="assetInfo">资源信息</param>
  292. public static AllAssetsOperationHandle LoadAllAssetsAsync(AssetInfo assetInfo)
  293. {
  294. DebugCheckDefaultPackageValid();
  295. return _defaultPackage.LoadAllAssetsAsync(assetInfo);
  296. }
  297. /// <summary>
  298. /// 异步加载资源包内所有资源对象
  299. /// </summary>
  300. /// <typeparam name="TObject">资源类型</typeparam>
  301. /// <param name="location">资源的定位地址</param>
  302. public static AllAssetsOperationHandle LoadAllAssetsAsync<TObject>(string location) where TObject : UnityEngine.Object
  303. {
  304. DebugCheckDefaultPackageValid();
  305. return _defaultPackage.LoadAllAssetsAsync<TObject>(location);
  306. }
  307. /// <summary>
  308. /// 异步加载资源包内所有资源对象
  309. /// </summary>
  310. /// <param name="location">资源的定位地址</param>
  311. /// <param name="type">子对象类型</param>
  312. public static AllAssetsOperationHandle LoadAllAssetsAsync(string location, System.Type type)
  313. {
  314. DebugCheckDefaultPackageValid();
  315. return _defaultPackage.LoadAllAssetsAsync(location, type);
  316. }
  317. #endregion
  318. #region 资源下载
  319. /// <summary>
  320. /// 创建资源下载器,用于下载当前资源版本所有的资源包文件
  321. /// </summary>
  322. /// <param name="downloadingMaxNumber">同时下载的最大文件数</param>
  323. /// <param name="failedTryAgain">下载失败的重试次数</param>
  324. public static ResourceDownloaderOperation CreateResourceDownloader(int downloadingMaxNumber, int failedTryAgain)
  325. {
  326. DebugCheckDefaultPackageValid();
  327. return _defaultPackage.CreateResourceDownloader(downloadingMaxNumber, failedTryAgain);
  328. }
  329. /// <summary>
  330. /// 创建资源下载器,用于下载指定的资源标签关联的资源包文件
  331. /// </summary>
  332. /// <param name="tag">资源标签</param>
  333. /// <param name="downloadingMaxNumber">同时下载的最大文件数</param>
  334. /// <param name="failedTryAgain">下载失败的重试次数</param>
  335. public static ResourceDownloaderOperation CreateResourceDownloader(string tag, int downloadingMaxNumber, int failedTryAgain)
  336. {
  337. DebugCheckDefaultPackageValid();
  338. return _defaultPackage.CreateResourceDownloader(new string[] { tag }, downloadingMaxNumber, failedTryAgain);
  339. }
  340. /// <summary>
  341. /// 创建资源下载器,用于下载指定的资源标签列表关联的资源包文件
  342. /// </summary>
  343. /// <param name="tags">资源标签列表</param>
  344. /// <param name="downloadingMaxNumber">同时下载的最大文件数</param>
  345. /// <param name="failedTryAgain">下载失败的重试次数</param>
  346. public static ResourceDownloaderOperation CreateResourceDownloader(string[] tags, int downloadingMaxNumber, int failedTryAgain)
  347. {
  348. DebugCheckDefaultPackageValid();
  349. return _defaultPackage.CreateResourceDownloader(tags, downloadingMaxNumber, failedTryAgain);
  350. }
  351. /// <summary>
  352. /// 创建资源下载器,用于下载指定的资源依赖的资源包文件
  353. /// </summary>
  354. /// <param name="location">资源定位地址</param>
  355. /// <param name="downloadingMaxNumber">同时下载的最大文件数</param>
  356. /// <param name="failedTryAgain">下载失败的重试次数</param>
  357. public static ResourceDownloaderOperation CreateBundleDownloader(string location, int downloadingMaxNumber, int failedTryAgain)
  358. {
  359. DebugCheckDefaultPackageValid();
  360. return _defaultPackage.CreateBundleDownloader(location, downloadingMaxNumber, failedTryAgain);
  361. }
  362. /// <summary>
  363. /// 创建资源下载器,用于下载指定的资源列表依赖的资源包文件
  364. /// </summary>
  365. /// <param name="locations">资源定位地址列表</param>
  366. /// <param name="downloadingMaxNumber">同时下载的最大文件数</param>
  367. /// <param name="failedTryAgain">下载失败的重试次数</param>
  368. public static ResourceDownloaderOperation CreateBundleDownloader(string[] locations, int downloadingMaxNumber, int failedTryAgain)
  369. {
  370. DebugCheckDefaultPackageValid();
  371. return _defaultPackage.CreateBundleDownloader(locations, downloadingMaxNumber, failedTryAgain);
  372. }
  373. /// <summary>
  374. /// 创建资源下载器,用于下载指定的资源依赖的资源包文件
  375. /// </summary>
  376. /// <param name="assetInfo">资源信息</param>
  377. /// <param name="downloadingMaxNumber">同时下载的最大文件数</param>
  378. /// <param name="failedTryAgain">下载失败的重试次数</param>
  379. public static ResourceDownloaderOperation CreateBundleDownloader(AssetInfo assetInfo, int downloadingMaxNumber, int failedTryAgain)
  380. {
  381. DebugCheckDefaultPackageValid();
  382. return _defaultPackage.CreateBundleDownloader(assetInfo, downloadingMaxNumber, failedTryAgain);
  383. }
  384. /// <summary>
  385. /// 创建资源下载器,用于下载指定的资源列表依赖的资源包文件
  386. /// </summary>
  387. /// <param name="assetInfos">资源信息列表</param>
  388. /// <param name="downloadingMaxNumber">同时下载的最大文件数</param>
  389. /// <param name="failedTryAgain">下载失败的重试次数</param>
  390. public static ResourceDownloaderOperation CreateBundleDownloader(AssetInfo[] assetInfos, int downloadingMaxNumber, int failedTryAgain)
  391. {
  392. DebugCheckDefaultPackageValid();
  393. return _defaultPackage.CreateBundleDownloader(assetInfos, downloadingMaxNumber, failedTryAgain);
  394. }
  395. #endregion
  396. #region 资源解压
  397. /// <summary>
  398. /// 创建内置资源解压器
  399. /// </summary>
  400. /// <param name="tag">资源标签</param>
  401. /// <param name="unpackingMaxNumber">同时解压的最大文件数</param>
  402. /// <param name="failedTryAgain">解压失败的重试次数</param>
  403. public static ResourceUnpackerOperation CreateResourceUnpacker(string tag, int unpackingMaxNumber, int failedTryAgain)
  404. {
  405. DebugCheckDefaultPackageValid();
  406. return _defaultPackage.CreateResourceUnpacker(tag, unpackingMaxNumber, failedTryAgain);
  407. }
  408. /// <summary>
  409. /// 创建内置资源解压器
  410. /// </summary>
  411. /// <param name="tags">资源标签列表</param>
  412. /// <param name="unpackingMaxNumber">同时解压的最大文件数</param>
  413. /// <param name="failedTryAgain">解压失败的重试次数</param>
  414. public static ResourceUnpackerOperation CreateResourceUnpacker(string[] tags, int unpackingMaxNumber, int failedTryAgain)
  415. {
  416. DebugCheckDefaultPackageValid();
  417. return _defaultPackage.CreateResourceUnpacker(tags, unpackingMaxNumber, failedTryAgain);
  418. }
  419. /// <summary>
  420. /// 创建内置资源解压器
  421. /// </summary>
  422. /// <param name="unpackingMaxNumber">同时解压的最大文件数</param>
  423. /// <param name="failedTryAgain">解压失败的重试次数</param>
  424. public static ResourceUnpackerOperation CreateResourceUnpacker(int unpackingMaxNumber, int failedTryAgain)
  425. {
  426. DebugCheckDefaultPackageValid();
  427. return _defaultPackage.CreateResourceUnpacker(unpackingMaxNumber, failedTryAgain);
  428. }
  429. #endregion
  430. #region 调试方法
  431. [Conditional("DEBUG")]
  432. private static void DebugCheckDefaultPackageValid()
  433. {
  434. if (_defaultPackage == null)
  435. throw new Exception($"Default package is null. Please use {nameof(YooAssets.SetDefaultPackage)} !");
  436. }
  437. #endregion
  438. }
  439. }