开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第7天,点击查看活动详情
第一步加载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);