必知:
①真正打包出去的时候,和Assets同级的文件夹AssetsBundle里面的资源肯定不会被打包出去。
②所以我们选择拷贝的StreamingAssets文件夹。会随着U3D打包出去的时候打包出去,不会对文件进行压缩。在PC平台可读可写,在IOS和Android只读。
AB包同步加载案例

using System.Collections;using System.Collections.Generic;using UnityEngine;public class ABTest : MonoBehaviour{//AB包同步加载案例:void Start(){//第一步 加载AB包AssetBundle ab = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "model");//第二部 加载AB包中的资源//只是使用名字加载 会使用 同名不同类型资源 分不清//建议大家用1泛型加载 或者 是 Type指定类型GameObject obj = ab.LoadAsset<GameObject>("Cube");//此处利用泛型(Lua不支持泛型)//GameObject obj = ab.LoadAsset("Cube", typeof(GameObject)) as GameObject;//------>到此处只是加载出来而已Instantiate(obj);//实例化//AB包不能重复加载,否则报错//卸载所有加载的AB包方法://1.为true时,场景中如果有资源是通过AB加载的,会一起被卸载(场景物体丢失)//2.为false时,场景物体不管,只卸载AB包。AssetBundle.UnloadAllAssetBundles(false);//卸载单个AB包方法:ab.Unload(false);}}
AB包异步加载案例
using System.Collections;using System.Collections.Generic;using UnityEngine;public class ABTest : MonoBehaviour{public Image img;void Start(){//异步加载->协程StartCoroutine(LoadABRes("image","image_1"));}IEnumerator LoadABRes(string ABName,string resName){//第一步 加载AB包AssetBundleCreateRequest abcr = AssetBundle.LoadFromFileAsync(Application.streamingAssetsPath + "/" + ABName);yield return abcr;//第二部加载资源AssetBundleRequest abq = abcr.assetBundle.LoadAssetAsync(resName, typeof(Sprite));yield return abq;img.sprite = abq.asset as Sprite;//此处两个yield return,至少要等待两帧}}
