欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-18 16:49:50
打包设置首先代码打包AB很简单,我们把它放在我们项目工程的根目录下using UnityEditor;using System.IO;public class CreateAssetBundles{ [MenuItem("Tools/BuildAssetBuldels")] static void BuildAllAssetBundles() { //判断有没有这个目录,没有的话就创建一个目录 string dir = "AssesBundles...

打包设置

首先代码打包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的设置

AssetBundle 如何打包AB包和调用AB包内资源
默认情况下,这里为null,我们直接点击之后选择“New”,新建一个包的种类
示例:公用资源 share,然后想创建一些子目录可以scene\wall
AssetBundle 如何打包AB包和调用AB包内资源
这个后缀可以随意设置,一般都是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);
        }
	}

本文地址:https://blog.csdn.net/Liu_ChangC/article/details/107318904