• 【Unity】AssetBundle加载与卸载


    unity官方apiAssetBundle-LoadFromFileAsync - Unity 脚本 API

    异步加载AB包

    1. using UnityEngine;
    2. using System.Collections;
    3. using System.IO;
    4. public class LoadFromFileAsyncExample : MonoBehaviour
    5. {
    6. IEnumerator Start()
    7. {
    8. var bundleLoadRequest = AssetBundle.LoadFromFileAsync(Path.Combine(Application.streamingAssetsPath, "myassetBundle"));
    9. yield return bundleLoadRequest;
    10. var myLoadedAssetBundle = bundleLoadRequest.assetBundle;
    11. if (myLoadedAssetBundle == null)
    12. {
    13. Debug.Log("Failed to load AssetBundle!");
    14. yield break;
    15. }
    16. var assetLoadRequest = myLoadedAssetBundle.LoadAssetAsync("MyObject");
    17. yield return assetLoadRequest;
    18. GameObject prefab = assetLoadRequest.asset as GameObject;
    19. Instantiate(prefab);
    20. myLoadedAssetBundle.Unload(false);
    21. }
    22. }

    需要注意的是同一个ab包一次只能加载一个,不可以同时加载,

    报错:The AssetBundle 'xxxxx' can't be loaded because another AssetBundle with the same files is already loaded.

    如果AB包已经加载过则先进行卸载:

    1. if (myLoadedAssetBundle != null)
    2. {
    3. myLoadedAssetBundle.Unload(false);//关键代码
    4. }

    卸载AB包

    1、卸载全部的目前没有使用的资源: Resources.UnloadUnusedAssets()

    2、卸载 AssetBundle 释放其数据: AssetBundle.Unload(true/false);

    3、卸载当前已加载的所有 AssetBundle: AssetBundle.UnloadAllAssetBundles(true/false)

    当 为 false 时,将释放当前加载的捆绑包中的压缩文件数据,但已从捆绑包中加载的任何对象实例将保持不变。
    UnloadAllAssetBundles不会中断异步加载过程,如果已经在进行异步加载了此时调用AssetBundle.UnloadAllAssetBundles,那么这个AB包还是会加载出来。

    1. using UnityEngine;
    2. public class AssetBundleManager : MonoBehaviour
    3. {
    4. public void LoadAssetBundle(string bundleName)
    5. {
    6. AssetBundle bundle = AssetBundle.LoadFromFile(bundleName);
    7. if (bundle != null)
    8. {
    9. // 假设你有一个你想要加载的资源的名字
    10. string assetName = "myAsset";
    11. UnityEngine.Object asset = bundle.LoadAsset(assetName);
    12. // 使用 asset ...
    13. // 卸载AssetBundle
    14. bundle.Unload(false);
    15. // 如果确定没有其他引用,可以进一步释放内存
    16. Resources.UnloadUnusedAssets();
    17. System.GC.Collect();
    18. }
    19. }
    20. }

  • 相关阅读:
    io模型初探
    基于PHP+MySQL毕业生档案管理系统
    Spring Cloud Alibaba Sentinel 使用
    数据结构-堆基本应用刷题
    记一次NAS故障分析(ZFS NFS)
    引线连接不紧都可能导致变压器直流电阻不平衡率超标
    C语言详解系列——函数的认识(5)函数递归与迭代
    阿里大手子评:入门到大成!GitHub新上线并发编程深度解析实战PDF
    FAA批准uAvionix C波段超视距飞行(BVLOS)豁免和Vantis网络
    变量的介绍
  • 原文地址:https://blog.csdn.net/qq_35064654/article/details/138170800