AssetBundle的加载和卸载

AB的加载

1.AssetBundle.LoadFromFile 从本地加载
    private void Start()
    {
        AssetBundle ab = AssetBundle.LoadFromFile("ab包名字/所在目录/资源名称.后缀");
        GameObject gameObj= ab.LoadAsset("资源名称");
        Instantiate(gameObj);   //实例化
    }
2.AssetBundle.LoadFromMemory 从内存加载
private void Start()
{
    AssetBundle ab = AssetBundle.LoadFromMemory(File.ReadAllBytes("ab包名字/所在目录/资源名称.后缀"));
    GameObject gameObj= ab.LoadAsset("资源名称");
    Instantiate(gameObj);   //实例化
}
3.AssetBundle.LoadFromMemoryAsync从内存异步加载
IEnumerator Start()
{
    AssetBundleCreateRequest request = AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes("ab包名字/所在目录/资源名称.后缀"));
    yield return request;
    AssetBundle ab = request.assetBundle;
    GameObject obj = ab.LoadAsset("资源名称");
    Instantiate(obj);
}
4.WWW.LoadFromCacheOrDownload 下载后放在缓存中备用(该方法逐渐被弃用)
 IEnumerator Start()
{
    while (Caching.ready == false)
    {
        yield return null;
    }
    // www 可以从本地加载,也可以从服务器加载
     string path = @"file://需要完整路径(有磁盘根目录的)"; //本地加载路径
    // string path = @"http://需要完整路径"; //服务器加载路径
    int versions = 1;   // 版本号
    WWW www = WWW.LoadFromCacheOrDownload(path , versions);
    yield return www;
    if (!string.IsNullOrEmpty(www.error))
    {
        Debug.Log(www.error);
        yield break;
    }
    AssetBundle ab = www.assetBundle;
    GameObject obj = ab.LoadAsset("Cube(Clone)");
    Instantiate(obj);
}
5.UnityWebRequest 从服务器下载
 IEnumerator Start()
{
    //路径
         string path = @"file://需要完整路径(有磁盘根目录的)"; //本地加载路径
    // string path = @"http://需要完整路径"; //服务器加载路径
    UnityWebRequest request = UnityWebRequest.GetAssetBundle(path );
    yield return request.SendWebRequest();
    //方式一
    //AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request);
    //方式二
    AssetBundle ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle;
    GameObject obj = ab.LoadAsset("Cube(Clone)");
    Instantiate(obj);
}
AB加载方式:
方法 描述
AssetBundle.LoadFromFile 从本地加载
AssetBundle.LoadFromMemory 从内存加载
WWW.LoadFromCacheOrDownload 下载后放在缓存中备用(该方法逐渐被弃用)
UnityWebRequest 从服务器下载
从AB中加载资源:
方法 描述
AssetBundle.LoadAsset(assetName) 加载AB包中的指定对象,不包含依赖的包
AssetBundle.LoadAllAssets() 加载AB包中所有的对象,不包含依赖的包
AssetBundle.LoadAssetAsync() 异步加载,加载较大资源的时候
AssetBundle.LoadAllAssetsAsync() 异步加载全部资源
AssetBundle.LoadAssetWithSubAssets 加载资源及其子资源
AB的卸载

减少内存的使用
有可能导致丢失
在切换场景,或者确定不使用的时候卸载

方法 描述
AssetBundle.Unload(true) 卸载所有资源,包含其中正被使用的资源
AssetBundle.Unload(false) 卸载所有没被使用的资源
Resources.UnloadUnusedAssets 卸载个别未使用的资源

下篇连接:https://www.jianshu.com/p/d6aacf68416f

————————————————

版权声明:本文为CSDN博主「虚拟喵」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_35361471/article/details/82854560

你可能感兴趣的:(AssetBundle的加载和卸载)