Unity Asset Bundle

AssetBundles-Browser下载链接

打包:

资源下方可以指定包和后缀,可以添加目录。

打包某个资源,如果其所依赖的资源没有被打包,那么依赖的资源会被打包到一起,如果多个地方都依赖到了该资源,就会重复占用空间。

物体依赖的贴图、材质等共享的资源需要一并打包。加载时需要先加载依赖资源。

using UnityEditor;
using System.IO;

public class AssetBundleGenerator
{
    [MenuItem("Assets/Build AssetBundles")]
    public static void GenerateAssetBundles()
    {
        string dir = "AssetBundle";
        if (!Directory.Exists(dir))
        {
            Directory.CreateDirectory(dir);
        }
        BuildPipeline.BuildAssetBundles(dir, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);
    }
}

BuildAssetBundleOptions

常用方式:
None: 使用 LZMA 算法压缩,压缩包体小,加载时间长,使用前需要整体解压。下载时使用LZMA算法,解压后会使用LZ4算法重新压缩,保存到本地。

UncompressedAssetBundle: 不压缩

ChunkBasedCompression: 使用LZ4压缩。可以加载指定资源而不用解压全部。加载速度接近不压缩。

加载:
LoadFromMemory

        AssetBundleCreateRequest request = AssetBundle.LoadFromMemoryAsync(byte[]);
	
		yield return request;

        AssetBundle ab = request.assetBundle;

LoadFromFile

        AssetBundleCreateRequest request = AssetBundle.LoadFromFileAsync(path);
	
		yield return request;

        AssetBundle ab = request.assetBundle;

UnityWebRequest(从本地/服务器加载皆可)

        string url = "";
        UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(url);
        yield return request.SendWebRequest();
        AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request);

加载依赖
基本上只需要用到记录了所有信息的那个manifest

        AssetBundle manifestAB = AssetBundle.LoadFromFile("AssetBundle/AssetBundle");
        AssetBundleManifest manifest = manifestAB.LoadAsset<AssetBundleManifest>("AssetBundle.manifest");
        string[] dependencies = manifest.GetAllDependencies("包名");
        //拿到全部包名
        //string[] assetBundles =  manifest.GetAllAssetBundles();
        foreach(var depen in dependencies)
        {
            AssetBundle.LoadFromFile(depen);
        }

卸载ab包
可以在关卡切换等时候卸载,释放空间

	//卸载该包所有资源(推荐)
	xx.UnLoad(true);
	
	//卸载该包没有被使用的资源(使用该方式reload后是新的资源,原本的未卸载资源遗留在了内存中)
	//解决方式:移出所有引用--包括遗物体和脚本,然后调用 Resources.UnloadUnusedAssets()
	xx.UnLoad(false);

一个图集的图片尽量打包到一个包里

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值