版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第1页 第2页 AssetBundle是将资源用是将资源用Unity提供的一种用于存储资源提供的一种用于存储资源 的压缩格式打包后的集合,它是对资源管理的一个扩展,的压缩格式打包后的集合,它是对资源管理的一个扩展, 可以动态的加载和卸载,并且大大节约了游戏所占的空间,可以动态的加载和卸载,并且大大节约了游戏所占的空间, 即使是已经发布的游戏也可以用其来增加新的内容。即使是已经发布的游戏也可以用其来增加新的内容。 一般情况下,一般情况下,AssetBundle的开发流程具体步骤如下:的开发流程具体步骤如下: (1)创建)创建AssetBundle:开发者在:开发者在Unity编辑器中通过脚编辑器
2、中通过脚 本来将所需的资源打包成本来将所需的资源打包成AssetBundle文件。文件。 (2)上传至服务器:开发者创建好)上传至服务器:开发者创建好AssetBundle文件后,文件后, 可通过上传工具将其上传到游戏的服务器中,使游戏客户可通过上传工具将其上传到游戏的服务器中,使游戏客户 端可以通过访问服务器来获取当前所需要的资源,进而实端可以通过访问服务器来获取当前所需要的资源,进而实 现游戏的更新。现游戏的更新。 第3页 (3)下载)下载AssetBundle:游戏在运行时,客户端会将:游戏在运行时,客户端会将 服务器上传的游戏更新所需的服务器上传的游戏更新所需的AssetBundle下
3、载到本下载到本 地设备中,再通过加载模块将资源加载到游戏中。地设备中,再通过加载模块将资源加载到游戏中。 Unity提供了相应的提供了相应的API可供使用来完成从服务器端下可供使用来完成从服务器端下 载载AssetBundle。 (4)加载)加载AssetBundle:AssetBundle文件下载成功文件下载成功 后,开发者通过后,开发者通过Unity提供的提供的API可以加载资源包里所可以加载资源包里所 包含的模型、纹理图、音频、动画、场景等,并将其包含的模型、纹理图、音频、动画、场景等,并将其 实例化来更新游戏客户端。实例化来更新游戏客户端。 (5)卸载)卸载AssetBundle:在:
4、在Unity中提供了相应的方中提供了相应的方 法来卸载法来卸载AssetBundle,卸载,卸载AssetBundle可以节约可以节约 内存资源,并且保证资源的正常更新。内存资源,并且保证资源的正常更新。 第4页 10.2.1 AssetBundle的打包 1. AssetBundle系统系统 新建一个项目并命名为新建一个项目并命名为“BNUAssetBunds”,点击,点击GameObject3D ObjectCube,然后在,然后在Assets窗口创建一个窗口创建一个Prefab,并命名为,并命名为 “Cubeasset”,然后将刚刚创建好的,然后将刚刚创建好的Cube拖拽到拖拽到Cube
5、asset上,如图上,如图10-1 所示。所示。 图10-1 创建cubeasset预制件 第5页 10.2.1 AssetBundle的打包 1. AssetBundle系统系统 然后单击刚刚创建好的预制件然后单击刚刚创建好的预制件Cubeasset,在,在Inspector面板底部有面板底部有AssetBundle的的 创建工具,如图创建工具,如图10-2所示。接下来创建所示。接下来创建AssetBundle,空的,空的AssetBundles可以通过可以通过 点击菜单选项点击菜单选项“New”来创建,将其命名为来创建,将其命名为“cubeb”,如图,如图10-3所示。所示。 图10-2
6、AssetBundle创建工具图10-3 将对象的AssetBundle命名cubeb 第6页 10.2.1 AssetBundle的打包 2. BuildAssetBundles方法方法 1 public static AssetBundleMainfest BuildAssetBundles(string outputPath,BuildAssetBundleOptions 2 assetBundleOptions=BuildAssetBundleOption.None,BuildTarget targetPlatfom=BuildTarget.WebPlayer); 说明:上述声明中参数
7、含义中说明:上述声明中参数含义中“OutPath”参数为参数为AssetBundls的输出的输出 路径,一般情况下为路径,一般情况下为Assets下的某一个文件夹。下的某一个文件夹。 第7页 10.2.1 AssetBundle的打包 右键单击右键单击CreateFolder创建一个文件夹,并命名为创建一个文件夹,并命名为“C#”,然后在,然后在C#文件夹下右键文件夹下右键 单击单击CreateC# Script,并命名为,并命名为“BNUBuildAsset”,双击脚本编写代码来将上,双击脚本编写代码来将上 面创建的面创建的cubeasset打包成打包成AssetBundles并将其导出,具
8、体实现如下面代码片段所并将其导出,具体实现如下面代码片段所 示示 1 using UnityEngine; 2 using System.Collections; 3 using UnityEditor; /导入系统相关类导入系统相关类 4 public class BNUBuildAsset : MonoBehaviour 5 MenuItem(Test/Build Asset Bundles) /添加菜单栏添加菜单栏Test以及子以及子 菜单菜单Build Asset Bundles 6 static void BuildAssetBundles()/声明声明BuildAssetBundl
9、es方法方法 7/将资源打包到本项目中的将资源打包到本项目中的Assetbundle文件夹下,并设置为未压缩格式文件夹下,并设置为未压缩格式 8 BuildPipeline.BuildAssetBundles(Application.dataPath + /Assetbundle, 9 BuildAssetBundleOptions.UncompressedAssetBundle); 10 第8页 10.2.1 AssetBundle的打包 此脚本编写完后并不需要挂载到对象或者主摄像机上,编写完成后会在菜单栏自动生成此脚本编写完后并不需要挂载到对象或者主摄像机上,编写完成后会在菜单栏自动生成“
10、Test” 项,如图项,如图10-4所示。单击其子菜单所示。单击其子菜单“Build Asset Bundles”,完成,完成AssetBundle的打包,打包的打包,打包 完成后会在完成后会在AssetBundle文件夹下生成相关文件,如图文件夹下生成相关文件,如图10-5所示。所示。 图10-4 生成Test菜单图10-5 AssetBundle打包文件 第9页 10.2.1 AssetBundle的打包 每一个每一个AssetBundle资源将会有一个和原文件相关的资源将会有一个和原文件相关的“.mainfest”的文本类型的文件,的文本类型的文件, 该文件提供了所打包资源的该文件提供了
11、所打包资源的CRC和资源依赖的信息,比如本案例中的和资源依赖的信息,比如本案例中的Cubeasset打包打包 成的成的“cubeb.mainfest”文件,如图文件,如图10-6所示。所示。 图10-6 AssetBundle打包文件 第10页 10.2.2下载AssetBundle 1.非缓存机制非缓存机制 非缓存机制通过创建一个非缓存机制通过创建一个WWW实例来下载实例来下载AssetBundle文件。采用此种方式下载文件。采用此种方式下载 AssetBundle的文件不会存入的文件不会存入Unity引擎的缓存区。引擎的缓存区。 3public class BNUDownoad : Mon
12、oBehaviour 4 public string BundleURL;/定义定义URL字符串字符串 5 public string AssetName;/定义资源名字字符串定义资源名字字符串 6 IEnumerator Start() 7 using (WWW www = new WWW(BundleURL)/创建一个网页链接请求,并赋给创建一个网页链接请求,并赋给www 8 yield return www;/返回返回www的值的值 9 if (www.error != null)/如果下载过程中出现错误如果下载过程中出现错误 10 Debug.Log(WWW download had
13、an error: + www.error); /打印错误的提示信息打印错误的提示信息 11 AssetBundle bundle = www.assetBundle;/下载下载AssetBundle 12 if (AssetName = )/如果没有指定具体的资源名字如果没有指定具体的资源名字 13 Instantiate(bundle.mainAsset);/实例化主资源实例化主资源 14 else 15 Instantiate(bundle.LoadAsset(AssetName);/否则实例化指定名字的资源否则实例化指定名字的资源 16 bundle.Unload(false); /释
14、放释放bundle的序列化数据的序列化数据 第11页 10.2.2下载AssetBundle 2. 缓存机制缓存机制 缓存机制通过缓存机制通过WWW类下的类下的LoadFromCacheOrDownload接口来实现接口来实现AssetBundle 的下载。通过缓存机制下载的的下载。通过缓存机制下载的AssetBundle会被存储在会被存储在Unity的本地缓存区中。的本地缓存区中。 Unity提供的默认缓存大小在不同平台上也有所不同,在提供的默认缓存大小在不同平台上也有所不同,在Web Player平台上发布的网平台上发布的网 页游戏默认缓存大小为页游戏默认缓存大小为50MB;在;在PC客户
15、端发布的游戏和在客户端发布的游戏和在iOS/Android平台上发布平台上发布 移动游戏默认缓存大小为移动游戏默认缓存大小为4GB。 4 public class BNUDownloadasset: MonoBehaviour 5 public string BundleURL;/定义定义URL字符串字符串 6 public string AssetName;/定义资源名字字符串定义资源名字字符串 7 public int version; /定义版本号定义版本号 8 void Start() 9 StartCoroutine(DownloadAndCache();/开始缓存机制下载协同程序开
16、始缓存机制下载协同程序 10 第12页 10.2.2下载AssetBundle 2.缓存机制缓存机制 11 IEnumerator DownloadAndCache() 12 while (!Caching.ready) /如果换成没准备好如果换成没准备好 13 yield return null; /返回空对象返回空对象 14 using (WWW www = WWW.LoadFromCacheOrDownload(BundleURL, version) 15/创建一个网页链接请求,并赋给创建一个网页链接请求,并赋给www 16 yield return www; /返回返回www 17 i
17、f (www.error != null) /如果下载过程中出现错误如果下载过程中出现错误 18 throw new Exception(WWW download had an error: + www.error); /抛出异常抛出异常 19 AssetBundle bundle = www.assetBundle; /下载下载AssetBundle 20 if (AssetName = ) /如果未指定打包的资源如果未指定打包的资源 21 Instantiate(bundle.mainAsset);/实例化主资源实例化主资源 22 else 23 Instantiate(bundle.Lo
18、adAsset(AssetName);/否则实例化指定资源否则实例化指定资源 24 bundle.Unload(false);/释放释放bundle的序列化数据的序列化数据 25 第13页 10.2.3 AssetBundle的加载和卸载 AssetBundle下载完成后,并不能直接被使用,需要将下载完成后,并不能直接被使用,需要将AssetBundle 加 载 到 内 存 中 并 且 创 建 成 具 体 的 文 件 对 象 , 这 个 过 程 就 是加 载 到 内 存 中 并 且 创 建 成 具 体 的 文 件 对 象 , 这 个 过 程 就 是 AssetBundle的加载,需要开发者编写
19、代码实现。的加载,需要开发者编写代码实现。 1.如何加载如何加载AssetBundle Unity提供了三种不同的方法来从已经下载的数据中加载提供了三种不同的方法来从已经下载的数据中加载 AssetBundle AssetBundle.LoadAsset AssetBundle.LoadAssetAsync AssetBundle.LoadAllAssets 下面编写脚本来加载下面编写脚本来加载AssetBundle,在,在C#文件夹下右键单击文件夹下右键单击 CreateC# Script创建一个脚本,并命名为创建一个脚本,并命名为“BNULoadAsset”,双,双 击脚本编写代码进行编写
20、,具体实现如下面的代码片段所示。击脚本编写代码进行编写,具体实现如下面的代码片段所示。 第14页 10.2.3AssetBundle的加载和卸载 1 using UnityEngine; 2 using System.Collections;/导入系统相关类导入系统相关类 3 public class BNULoadAsset : MonoBehaviour 4 void OnGUI()/声明声明OnGUI方法方法 5 if (GUILayout.Button(LoadAssetbundle) /创建加载创建加载AssetBundle按钮,并判断是否被按下按钮,并判断是否被按下 6 Asset
21、Bundle manifestBundle = AssetBundle.CreateFromFile(Application.dataPath 7 + /Assetbundle/AssetBundle);/首先加载首先加载Manifest文件文件; 8 if (manifestBundle != null)/如果如果Mainfest文件不为空文件不为空 9 AssetBundleManifest manifest = (AssetBundleManifest)manifestBundle.LoadAsset( 10 AssetBundleManifest);/加载主资源文件的加载主资源文件的A
22、ssetBundle 11 AssetBundle cubeBundle = AssetBundle.CreateFromFile(Application.dataPath 12 + /Assetbundle/cubeb);/加载加载cube对象的对象的AssetBundle 13 GameObject cube = cubeBundle.LoadAsset(Cube) as GameObject;/获取获取 cube对象对象 14 if (cube != null) 15 Instantiate(cube); /实例化实例化cube 16 第15页 10.2.3 AssetBundle的加载
23、和卸载 点击运行按钮之后,案例的运行效果会显示在点击运行按钮之后,案例的运行效果会显示在Game窗口中,屏幕有一个按钮,如图窗口中,屏幕有一个按钮,如图 10-7所示。单击按钮,在窗口中会出现实例化的所示。单击按钮,在窗口中会出现实例化的cube对象,并且在左侧的层次结构对象,并且在左侧的层次结构 中也有显示,如图中也有显示,如图10-8所示。所示。 图10-7 案例运行效果10-8 实例化cube对象 第16页 10.2.3 AssetBundle的加载和卸载 2.AssetBundle的卸载的卸载 AssetBundle.Unload(flase) 说明:说明:false是指释放是指释放A
24、ssetBundle文件的内存镜像,不包含文件的内存镜像,不包含 Load创建的创建的Asset内存对象。内存对象。 AssetBundle.Unload(true) 说明:说明:true是释放那个是释放那个AssetBundle文件内存镜像和并销毁文件内存镜像和并销毁 所有用所有用Load创建的创建的Asset内存对象。内存对象。 第17页 10.3.1 管理依赖 如果一个共享的依赖资源被包含在每一个使用它的对象中,如果一个共享的依赖资源被包含在每一个使用它的对象中, 那么当这些对象被打包时,此部分共享的资源就会被多次打那么当这些对象被打包时,此部分共享的资源就会被多次打 包,这样会造成内存
25、的浪费。为了避免这种浪费,需要将共包,这样会造成内存的浪费。为了避免这种浪费,需要将共 享的资源打包到一个单独的享的资源打包到一个单独的AssetBundle中,然后让两个模中,然后让两个模 型所隶属的型所隶属的AssetBundle分别依赖于该分别依赖于该AssetBundle。 第18页 10.3.2储存和加载二进制文件 下面是一个在下面是一个在AssetBundle中存储和加载二进制数据的案例中存储和加载二进制数据的案例 1 using UnityEngine; 2 using System.Collections; 3 public class BNUBinarydata : Mono
26、Behaviour 4 string url = http:/ 5/定义定义url字符串字符串 6 IEnumerator Start() 7 WWW www = WWW.LoadFromCacheOrDownload(url, 1); /通过所给的通过所给的URL开始一个下载开始一个下载 8 yield return www;/等待下载完成等待下载完成 9 AssetBundle bundle = www.assetBundle;/加载并且取回加载并且取回AssetBundle 10 TextAsset txt = bundle.LoadAsset(myBinaryAsText) as TextAsset; /加载对象加载对象 11 byte bytes = txt.bytes;/检索二进制数据的字节数组检索二进制数据的字节数组 12 第19页 10.3.3 在资源中包含脚本 如果你想在如果你想在AssetBundle
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 计算机维修工高级技师考试及答案
- 2026年厦门华天涉外职业技术学院单招职业适应性考试题库含答案详解(精练)
- 2026年兰考三农职业学院单招职业技能测试题库附参考答案详解(培优)
- 2026年兰州石化职业技术大学单招职业倾向性考试题库及答案详解(必刷)
- 2026年南阳工艺美术职业学院单招职业倾向性测试题库含答案详解
- 2026年南昌理工学院单招综合素质考试题库附答案详解(达标题)
- 2026年信阳航空职业学院单招职业适应性考试题库及完整答案详解一套
- 2026年内蒙古锡林郭勒盟单招职业适应性测试题库含答案详解(a卷)
- 2026年信阳航空职业学院单招职业倾向性考试题库及参考答案详解1套
- 2026年信阳航空职业学院单招职业适应性测试题库带答案详解(b卷)
- 高速公路安全培训课件
- (2026年春季新版本)人教版二年级数学下册全册教案
- 步行交通安全课件
- 食品感官评价师岗位招聘考试试卷及答案
- 项目管理教学课件
- GB/T 12229-2025通用阀门碳素钢铸件技术规范
- (零模)2026届广州市高三年级调研测试数学试卷(含答案解析)
- 2019北京西城四年级(下)期末数学(教师版)
- 2025年(完整版)档案管理笔试题目及答案
- 2026年辽宁医药职业学院单招职业技能测试题库带答案解析
- GB/T 13471-2025节能项目经济效益计算与评价方法
评论
0/150
提交评论