AssetBundle 如何打包AB包和调用AB包内资源

本文详细介绍了在Unity中使用AssetBundles进行资源打包的方法,包括代码实现、目录创建、不同平台的选择,以及如何从根目录或通过WWW加载资源。同时,提供了官方推荐的加载方式,适用于游戏开发和资源管理。

打包设置

首先代码打包AB很简单,我们把它放在我们项目工程的根目录下

using UnityEditor;
using System.IO;

public class CreateAssetBundles
{
    [MenuItem("Tools/BuildAssetBuldels")]
    static void BuildAllAssetBundles()
    {
    	//判断有没有这个目录,没有的话就创建一个目录
        string dir = "AssesBundles";
        if (Directory.Exists(dir) == false)
        {
            Directory.CreateDirectory(dir);
        }
        //打包AB包代码
       	//BuildAssetBundleOptions.None选择哪种压缩方式None的包体相对较小,第一次解压需花费较长时间
       	//BuildTarget.StandaloneWindows64这个需要根据需求旋转不同的平台
        BuildPipeline.BuildAssetBundles(dir, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
    }
}

在Unity里面,我们需要讲我们要打包的资源进行一些AssetBundle的设置

在这里插入图片描述
默认情况下,这里为null,我们直接点击之后选择“New”,新建一个包的种类
示例:公用资源 share,然后想创建一些子目录可以scene\wall
在这里插入图片描述
这个后缀可以随意设置,一般都是ab,unity3d之类的

从包中加载资源

从上面设置的根目录加载

	void Start(){
		//从根目录里面加载ab包,这里需要加后缀
		AssetBundle shareAb = AssetBundle.LoadFromFile("AssesBundles/share.unity3d");
		AssetBundle ab = AssetBundle.LoadFromFile("AssesBundles/scene/prefab.unity3d");

		//把取到的资源生成到我们的场景,这里不需要后缀
		GameObject cube = ab.LoadAsset<GameObject>("Cube");
		Instantiate(cube);
	}

通过WWW加载

	IEnumerator Start(){
		while (!Caching.ready)
        {
            yield return null;
        }
        //本地绝对路径
        WWW www = WWW.LoadFromCacheOrDownload(@"file:///E:\WebProgram\AssesBundles\scene\prefab.unity3d", 1);
        //服务器
        //WWW www = WWW.LoadFromCacheOrDownload(@"http://192.168.0.191/AssesBundles/scene/prefab.unity3d", 1);
        yield return www;
        if (!string.IsNullOrEmpty(www.error))
        {
            Debug.Log(www.error);
            yield break;
        }
        var ab = www.assetBundle;
	}

使用官方推荐的加载方式

	IEnumerator Start(){
	 	//通过UnityEngine.Networking.UnityWebRequest 
        //string uri = @"file:///E:\WebProgram\AssesBundles\scene\prefab.unity3d ";
        string uri = @"http://192.168.0.191/AssesBundles/scene/prefab.unity3d";
        var request = UnityWebRequest.GetAssetBundle(uri);

        yield return request.SendWebRequest();

        //var ab = DownloadHandlerAssetBundle.GetContent(request);
        var ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle;

		//把加载到的prefab资源都生成
        var objs = ab.LoadAllAssets();

        foreach (var item in objs)
        {
            Instantiate(item);
        }
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贪小心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值