【Unity】AssetBundle(UniTask)加载

using Cysharp.Threading.Tasks;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.Networking;

public class AssetBundleInfo
{
    public string path;
    public string description;

}
namespace JGTools
{
    public class AssetBundleHelper
    {
        #region 加载assetbundle

        public static IEnumerator LoadAB(AssetBundleInfo assetBundleInfo)
        {
            AssetBundle assetBundle = null;
            using (FileStream stream = new FileStream(assetBundleInfo.path, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                AssetBundleCreateRequest assetBundleCreateRequest = AssetBundle.LoadFromStreamAsync(stream);
                yield return assetBundleCreateRequest;
                assetBundle = assetBundleCreateRequest.assetBundle;
            }
            if (assetBundle == null)
            {
                Response(false, null, assetBundleInfo);
                yield break;
            }
            string[] names = assetBundle.GetAllAssetNames();
            if (names.Length > 0)
            {
                var assetLoadRequest = assetBundle.LoadAssetAsync<GameObject>(names[0]);
                yield return assetLoadRequest;
                GameObject prefab = assetLoadRequest.asset as GameObject;
                if (prefab != null)
                {
                    Response(true, prefab, assetBundleInfo);
                }
            }
            else
            {
                Response(false, null, assetBundleInfo);
            }
            assetBundle.Unload(false);
        }

        public static void Response(bool success, GameObject prefab, AssetBundleInfo abinfo)
        {

        }

        #endregion


        public static async UniTask LoadAssetBundleAsync(string path)
        {
            UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(path);
            var operation = request.SendWebRequest();

            await operation.ToUniTask();

            if (request.result == UnityWebRequest.Result.Success)
            {
                AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request);
                // 在这里进行您需要的操作,例如加载资源等
                string[] names = bundle.GetAllAssetNames();
                if (names.Length > 0)
                {
                    if (names.Length > 0)
                    {
                        var assetLoadRequest = bundle.LoadAssetAsync<GameObject>(names[0]);
                        GameObject prefab = assetLoadRequest.asset as GameObject;
                        if (prefab != null)
                        {
                            Debug.Log(prefab.name);
                            //Response(true, prefab, path);
                            GameObject.Instantiate(prefab);
                        }
                    }
                    else
                    {
                        //Response(false, null, path);
                    }
                }
                bundle.Unload(false);
            }
            else
            {
                Debug.LogError("Failed to load Asset Bundle: " + request.error);
            }
            
        }



    }
}

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值