Unity热更新——AB包的基本操作

254 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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);