AssetBundle使用
1.1 AssetBundle介绍
AssetBundle是将资源使用Unity提供的一种用于存储资源的压缩格式打包后的集合,它可以存储任何一种Unity可以识别的资源,如模型,纹理图,音频,场景等资源。也可以加载开发者自定义的二进制文件。他们的文件类型是.assetbundle或者
/.unity3d,他们先前被设计好,很容易就下载到我们的游戏或者场景当中。
AssetBundle(简称AB包)是一个资源压缩包,包含模型、贴图、预制体、声音、甚至整个场景,可以在游戏运行的时候被加载;
基本特点如下所示:
(1)AssetBundle自身保存着互相的依赖关系;
(2)压缩包可以使用LZMA和LZ4压缩算法,减少包大小,更快的进行网络传输;
(3)把一些可以下载内容放在AssetBundle里面,可以减少安装包的大小;如果所有的资源文件,全部打包到程序中,那么程序的安装包就会很大
(4)AssetBundle 文件放在服务器上,用的时候再从服务器进行加载,所以这个包根本就不在程序当中
一般情况下AssetBundle的具体开发流程如下:
(1)创建Asset bundle,开发者在unity编辑器中通过脚本将所需要的资源打包成AssetBundle文件。
(2)上传服务器,开发者将打包好的AssetBundle文件上传至服务器中。使得游戏客户端能够获取当前的资源,进行游戏的更新。
(3)下载AssetBundle,首先将其下载到本地设备中,然后再通过AsstBudle的加载模块将资源加到游戏之中。
(4)加载,通过Unity提供的API可以加载资源里面包含的模型、纹理图、音频、动画、场景等来更新游戏客户端。
(5)卸载AssetBundle,卸载之后可以节省内存资源,并且要保证资源的正常更新。
1.2 AssetBundle打包
1:我们首先自己进行打包,打包方式如下。新建Editor目录,写如下脚本,不同平台指定不同的目录以及BuildTarget不同即可。
参数含义:路径+选项+平台
-- Build的路径:自己定义路径即可,也可以是StreamingAssets路径
--BuildAssetBundleOptions
BuildAssetBundleOptions.None:使用LZMA算法压缩,压缩的包更小,但是加载时间更长。使用之前需要整体解压。一旦被解压,这个包会使用LZ4重新压缩。使用资源的时候不需要整体解压。在下载的时候可以使用LZMA算法,一旦它被下载了之后,它会使用LZ4算法保存到本地上。
BuildAssetBundleOptions.UncompressedAssetBundle:不压缩,包大,加载快
BuildAssetBundleOptions.ChunkBasedCompression:使用LZ4压缩,压缩率没有LZMA高,但是我们可以加载指定资源而不用解压全部。
注意:使用LZ4压缩,可以获得可以跟不压缩想媲美的加载速度,而且比不压缩文件要小。
平台:直接查看即可,各种平台
public class ExportAssets : MonoBehaviour
{
[@MenuItem("AssetBundle/Build Window Bundles")]
static void BuildAssetBundles()
{
//使用BuildPipeline进行打包:路径+选项+平台
BuildPipeline.BuildAssetBundles(Application.streamingAssetsPath,
BuildAssetBundleOptions.UncompressedAssetBundle,
BuildTarget.StandaloneWindows);
}
[@MenuItem("AssetBundle/Build AssetBundles")]
static void BuildAssetBundles()
{
string dir = "AssetBundles";
if (Directory.Exists(dir) == false)
{
Directory.CreateDirectory(dir);
}
//BuildTarget 选择build出来的AB包要使用的平台
BuildPipeline.BuildAssetBundles(dir,BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
}
}
命名规范:
1、必须小写字母,就算你大写了Unity也会自动转小写
2、命名规范:名称后要加 .unity3d 或者 .assetbundle
3、名称+“/”+另一个名称,会自动生成子选项(打包时,会自动生成一个新的名称文件夹)
打包之后,会生成对应的后缀为manifest的文件。什么是Manifest文件?
- CRC为校验码,通过其检查是否完整
- Assets 表示包里包含多少资源
- Dependencies 表示包有哪些依赖
注意:在加载这些包之前,也需要加载依赖的包,不然会丢失这部分内容,显示效果不正确
2:下面演示AssetBundle的下载,如下代码所示,使用Python开启简易文件服务器
Python 2.x版本:python -m SimpleHTTPServer 8080
Python 3.x版本:python -m http.server 8080
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DownAsset : MonoBehaviour
{
public GameObject cube;
public GameObject sphere;
public Transform newPos;
private string url1 = "http://127.0.0.1:8080/cubeasset"; //立方体
private string url2 = "http://127.0.0.1:8080/image"; //图片
private string url3 = "http://127.0.0.1:8080/red"; //材质
// Start is called before the first frame update
void Start()
{
// StartCoroutine(downloadTexture(url2));
// StartCoroutine(downloadMat(url3));
StartCoroutine(downloadPrefab(url1));
}
IEnumerator downloadTexture(string url) {
//WWW是网络功能类:可以使用UnityWebRequest进行替换
WWW data = new WWW(url);
yield return data;
//从内存直接加载,因为WWW已经将数据下载下来了,参数是字节

本文详细介绍了Unity中AssetBundle的使用方法,包括AssetBundle的概念、打包流程、依赖管理和加载方式等核心内容。并提供了实际代码示例,帮助读者更好地理解和应用。
最低0.47元/天 解锁文章
2549

被折叠的 条评论
为什么被折叠?



