当前位置:   article > 正文

【Unity】AssetBundle(UniTask)加载

【Unity】AssetBundle(UniTask)加载
  1. using Cysharp.Threading.Tasks;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using UnityEngine;
  6. using UnityEngine.Networking;
  7. public class AssetBundleInfo
  8. {
  9. public string path;
  10. public string description;
  11. }
  12. namespace JGTools
  13. {
  14. public class AssetBundleHelper
  15. {
  16. #region 加载assetbundle
  17. public static IEnumerator LoadAB(AssetBundleInfo assetBundleInfo)
  18. {
  19. AssetBundle assetBundle = null;
  20. using (FileStream stream = new FileStream(assetBundleInfo.path, FileMode.Open, FileAccess.Read, FileShare.Read))
  21. {
  22. AssetBundleCreateRequest assetBundleCreateRequest = AssetBundle.LoadFromStreamAsync(stream);
  23. yield return assetBundleCreateRequest;
  24. assetBundle = assetBundleCreateRequest.assetBundle;
  25. }
  26. if (assetBundle == null)
  27. {
  28. Response(false, null, assetBundleInfo);
  29. yield break;
  30. }
  31. string[] names = assetBundle.GetAllAssetNames();
  32. if (names.Length > 0)
  33. {
  34. var assetLoadRequest = assetBundle.LoadAssetAsync<GameObject>(names[0]);
  35. yield return assetLoadRequest;
  36. GameObject prefab = assetLoadRequest.asset as GameObject;
  37. if (prefab != null)
  38. {
  39. Response(true, prefab, assetBundleInfo);
  40. }
  41. }
  42. else
  43. {
  44. Response(false, null, assetBundleInfo);
  45. }
  46. assetBundle.Unload(false);
  47. }
  48. public static void Response(bool success, GameObject prefab, AssetBundleInfo abinfo)
  49. {
  50. }
  51. #endregion
  52. public static async UniTask LoadAssetBundleAsync(string path)
  53. {
  54. UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(path);
  55. var operation = request.SendWebRequest();
  56. await operation.ToUniTask();
  57. if (request.result == UnityWebRequest.Result.Success)
  58. {
  59. AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request);
  60. // 在这里进行您需要的操作,例如加载资源等
  61. string[] names = bundle.GetAllAssetNames();
  62. if (names.Length > 0)
  63. {
  64. if (names.Length > 0)
  65. {
  66. var assetLoadRequest = bundle.LoadAssetAsync<GameObject>(names[0]);
  67. GameObject prefab = assetLoadRequest.asset as GameObject;
  68. if (prefab != null)
  69. {
  70. Debug.Log(prefab.name);
  71. //Response(true, prefab, path);
  72. GameObject.Instantiate(prefab);
  73. }
  74. }
  75. else
  76. {
  77. //Response(false, null, path);
  78. }
  79. }
  80. bundle.Unload(false);
  81. }
  82. else
  83. {
  84. Debug.LogError("Failed to load Asset Bundle: " + request.error);
  85. }
  86. }
  87. }
  88. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/87431
推荐阅读
相关标签
  

闽ICP备14008679号