第一步加载AB包
AssetBundle.LoadFromFile 从本地加载
以编辑器为使用案例,AB包的资源拷贝到了 streamingAssetsPath 的目录下,加载AB包资源操作如下。如果是其他平台的,则只需要保证AB包资源的正式路径正确即可
string path = Application.streamingAssetsPath + "/" + "common/main.ab"; AssetBundle ab = AssetBundle.LoadFromFile(path); AssetBundle.LoadFromFileAsync 异步加载 void Start() { StartCoroutine(LoadABPackRes()); } IEnumerator LoadABPackRes() {
以编辑器为使用案例,AB包的资源拷贝到了streamingAssetsPath 的目录下,加载AB包资源操作如下。如果是其他平台的,则只需要保证AB包资源的正式路径正确即可。
string path = Application.streamingAssetsPath + "/" + "common/main.ab"; AssetBundleCreateRequest abPack = AssetBundle.LoadFromFileAsync(path); yield return abPack; // TODD 操作使用已加载的AB包资源 abPack }
第二步加载AB包中的资源
只是用名字加载会出现同名不同类型资源分不清,所以建议大家用泛型加载或者是Type指定类型
Gameobject obj = ab.LoadAsset<Gameobject>("cube" ); Gameobject obj = ab.LoadAsset( "cube", typeof(Gameobject)) as Gameobject; Instantiate(obj);
AB包不能够重复加载否则报错
AssetBundle ab2 = AssetBundle.LoadFromFile(Application.streamingAssetsPath + " /"” +"model");
加载—个圆
Gameobject obj2 = ab.LoadAsset("sphere" , typeof(Gameobject)) as Gameobject;Instantiate(obj2);
异步加载—>协程
StartCoroutine( LoadABRes ( "head", "23_11100001"));
第一步加载AB包
AssetBundleCreateRequest abcr = AssetBundle.LoadFromFileAsync(Application.streamingAssetsPath + " /"+ ABName); yield return abcr;
第二步加载资源
AssetBundleRequest abq = abcr.assetBundle.LoadAssetAsync(resName,typeof(Sprite)); yield return abq; //abq.asset as sprite; img.sprite = abq.asset as sprite;
第三步 卸载AB包中的资源
AssetBundle.Unload 卸载当前包资源
以编辑器为使用案例,AB包的资源拷贝到了 streamingAssetsPath 的目录下,加载AB包资源操作如下
如果是其他平台的,则只需要保证AB包资源的正式路径正确即可
string path = Application.streamingAssetsPath + "/" + "common/main.ab"; AssetBundle abPack = AssetBundle.LoadFromFile(path);
卸载当前已经已加载abPack的AB包, 参数true表示卸载AB包时,同时卸载掉所有的资源引用, false则只卸载AB包,不卸载掉当前已经使用的资源
abPack .Unload(true); AssetBundle.UnloadAllAssetBundles 卸载所有AB包资源
卸载所有已加载的AB包, 参数true表示卸载AB包时,同时卸载掉所有的资源引用, false则只卸载AB包,不卸载掉当前已经使用的资源
AssetBundle.UnloadAllAssetBundles(true);