AssetBundle入门

1、什么是AssetBundle

2、AssetBundle的打包流程

3、AssetBundle的加载与卸载

(1)同步加载

	//加载ab包,*一个包只能加载一次,加载两次会报错
	AssetBundle ab1 = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "ab1");
	//加载ab包里的资源
	GameObject gameObject;
	//参数:资源名,*避免使用,同名资源不同类型分不清
	gameObject = ab.LoadAsset("Cube") as GameObject;
	gameObject = ab1.LoadAsset("Cube", typeof(GameObject)) as GameObject;
	gameObject = ab1.LoadAsset<GameObject>("Cube");
	
	Instantiate(gameObject);

(2)异步加载

	StartCoroutine(LoadABRes("ab2", "Sphere"));
	IEnumerator LoadABRes(string ABName, string ResName) {
        //加载包
        AssetBundleCreateRequest abcr = AssetBundle.LoadFromFileAsync(Application.streamingAssetsPath + "/" + ABName);
        yield return abcr;
        //加载资源
        AssetBundleRequest abr = abcr.assetBundle.LoadAssetAsync(ResName, typeof(GameObject));
        yield return abr;

        Instantiate(abr.asset);
    }

(3)AB包依赖

ab1包中cube使用了ab2包中的材质,只加载ab1包会导致材质丢失,所以需要一起加载

	//方法一,知道依赖包在哪直接加载
	AssetBundle ab2 = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "ab2");
	
	//方法二,通过主包获取依赖信息
	//主包
	AssetBundle abMain = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "StandaloneWindows");
	//加载主包内文件
	AssetBundleManifest abManifest = abMain.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
	//获取ab1的依赖信息,参数为包名
	string[] strs = abManifest.GetAllDependencies("ab1");
	//循环加载对应依赖包
	for (int i = 0; i < strs.Length; i++) {
	    AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + strs[i]);
	}

(4)AB包卸载

	//卸载AB包,参数为是否删除已创建在场景中的游戏物体
    ab1.Unload(false);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值