AB包资源加载

创建脚本:

        //第一步 加载AB包
        AssetBundle.LoadFromFile();//里面应该传AB包路径

打包时我们默认的打包路径是Assets同级下的AssetBundles内的文件,例如上一次打包的PC

 还有一个就是因为我们选择了Copy to StreamingAssets所以它会在Asset下创建一个文件夹

我们为什么需要拷贝到StreamingAssets呢?

我们需要知道,当我们打包时,Assets同级下的AssetBundles内的文件是不会被打包出去的。

StreamingAssets文件夹会随着U3D打包而打包。它不会对里面的文件进行压缩加密和Resources不一样。在PC平台可读可写,IOS和Android是只读的。

 StreamingAssets文件夹路径怎么获取呢?

公共类中提供了:

Application.streamingAssetsPath//在不同平台下得到StreamingAssets路径

//第一步 加载AB包
AssetBundle ab =  AssetBundle.LoadFromFile(Application.streamingAssetsPath+"/"+"model");
//"/"可以"\\"代替不可以用"\"这个是转义符,+"包名"此处streamingAssetsPath内包明为model

不用泛型加载对象是Object,这样会造成一个问题。只用名字加载会出现 同名不同类型资源分不清

 

 因此推荐使用泛型的形式来加载

  //第二步 加载AB包中的资源
      GameObject obj =  ab.LoadAsset<GameObject>("Cube");

然后生成加载的对象

Instantiate(obj);

运行脚本:

 AB包不能重复加载 否则报错

//AB包不能够重复加载 否则报错
        //AssetBundle ab2 = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "model");

        //加载一个圆,由于我们已经加载了AB包,因此就省略了第一步
        GameObject obj2 = ab.LoadAsset("Sphere", typeof(GameObject)) as GameObject;
        Instantiate(obj2);

以上都是同步加载

异步加载->携程

创建携程

StartCoroutine(LoadABRes("head", "Sphere"));

IEnumerator LoadABRes(string ABName,string resName)
    {
        //第一步 加载AB包
      AssetBundleCreateRequest abcr =  AssetBundle.LoadFromFileAsync(Application.streamingAssetsPath + "/" + "ABName");
        yield return abcr;
        //第二部 加载资源
      AssetBundleRequest abq =  abcr.assetBundle.LoadAssetAsync("resName", typeof(GameObject));
        yield return abq;
        GameObject sp = abq.asset as GameObject;

        //abq.asset得到资源
        Instantiate(sp);
    }

卸载AssetBundle(AB包)

 AssetBundle.UnloadAllAssetBundles(true);如果为true的话,场景中有东西是AB包加载的话,那些东西也会被卸载。false只卸载AB包

 void Update()
    {
        if(Input.GetKeyDown(KeyCode.Space))
        {
            AssetBundle.UnloadAllAssetBundles(true);
        }
    }

 单独卸载model包(包含正方形的包)

ab.Unload(false);和上面一样,当为true时AB包加载的也会消除

1、如何解决AB包不允许重复加载的问题?

用字典记录已加载的AB包,如果存在则不重复加载

如果要记录,那么一定要提供卸载的方法

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值