版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1页游戏资源更新第2页10.1 初识AssetBundleAssetBundle是将资源用Unity提供的一种用于存储资源的压缩格式打包后的集合,它是对资源管理的一个扩展,可以动态的加载和卸载,并且大大节约了游戏所占的空间,即使是已经发布的游戏也可以用其来增加新的内容。一般情况下,AssetBundle的开发流程具体步骤如下:(1)创建AssetBundle:开发者在Unity编辑器中通过脚本来将所需的资源打包成AssetBundle文件。(2)上传至服务器:开发者创建好AssetBundle文件后,可通过上传工具将其上传到游戏的服务器中,使游戏客户端可以通过访问服务器来获取当前所需要的资源,进而实现游戏的更新。第3页10.1 初识AssetBundle(3)下载AssetBundle:游戏在运行时,客户端会将服务器上传的游戏更新所需的AssetBundle下载到本地设备中,再通过加载模块将资源加载到游戏中。Unity提供了相应的API可供使用来完成从服务器端下载AssetBundle。(4)加载AssetBundle:AssetBundle文件下载成功后,开发者通过Unity提供的API可以加载资源包里所包含的模型、纹理图、音频、动画、场景等,并将其实例化来更新游戏客户端。(5)卸载AssetBundle:在Unity中提供了相应的方法来卸载AssetBundle,卸载AssetBundle可以节约内存资源,并且保证资源的正常更新。第4页10.2AssetBundle的基本使用10.2.1 AssetBundle的打包1. AssetBundle系统新建一个项目并命名为“BNUAssetBunds”,点击GameObject→3DObject→Cube,然后在Assets窗口创建一个Prefab,并命名为“Cubeasset”,然后将刚刚创建好的Cube拖拽到Cubeasset上,如图10-1所示。图10-1创建cubeasset预制件第5页10.2AssetBundle的基本使用10.2.1 AssetBundle的打包1. AssetBundle系统然后单击刚刚创建好的预制件Cubeasset,在Inspector面板底部有AssetBundle的创建工具,如图10-2所示。接下来创建AssetBundle,空的AssetBundles可以通过点击菜单选项“New…”来创建,将其命名为“cubeb”,如图10-3所示。
图10-2AssetBundle创建工具 图10-3将对象的AssetBundle命名cubeb第6页10.2AssetBundle的基本使用10.2.1 AssetBundle的打包2. BuildAssetBundles方法1 publicstaticAssetBundleMainfestBuildAssetBundles(stringoutputPath,BuildAssetBundleOptions2assetBundleOptions=BuildAssetBundleOption.None,BuildTargettargetPlatfom=BuildTarget.WebPlayer);
说明:上述声明中参数含义中“OutPath”参数为AssetBundls的输出路径,一般情况下为Assets下的某一个文件夹。
第7页10.2AssetBundle的基本使用10.2.1 AssetBundle的打包右键单击Create→Folder创建一个文件夹,并命名为“C#”,然后在C#文件夹下右键单击Create→C#Script,并命名为“BNUBuildAsset”,双击脚本编写代码来将上面创建的cubeasset打包成AssetBundles并将其导出,具体实现如下面代码片段所示1 usingUnityEngine;2 usingSystem.Collections;3 usingUnityEditor; //导入系统相关类4 publicclassBNUBuildAsset:MonoBehaviour{5 [MenuItem("Test/BuildAssetBundles")] //添加菜单栏"Test"以及子菜单"BuildAssetBundles"6 staticvoidBuildAssetBundles(){ //声明BuildAssetBundles方法7 //将资源打包到本项目中的Assetbundle文件夹下,并设置为未压缩格式8 BuildPipeline.BuildAssetBundles(Application.dataPath+"/Assetbundle",9 BuildAssetBundleOptions.None,BuildTarget.StandaloneWindows64);10 }}
第8页10.2AssetBundle的基本使用10.2.1 AssetBundle的打包此脚本编写完后并不需要挂载到对象或者主摄像机上,编写完成后会在菜单栏自动生成“Test”项,如图10-4所示。单击其子菜单“BuildAssetBundles”,完成AssetBundle的打包,打包完成后会在AssetBundle文件夹下生成相关文件,如图10-5所示。
图10-4生成Test菜单 图10-5AssetBundle打包文件第9页10.2AssetBundle的基本使用10.2.1 AssetBundle的打包每一个AssetBundle资源将会有一个和原文件相关的“.mainfest”的文本类型的文件,该文件提供了所打包资源的CRC和资源依赖的信息,比如本案例中的Cubeasset打包成的“cubeb.mainfest”文件,如图10-6所示。
图10-6AssetBundle打包文件第10页10.2AssetBundle的基本使用10.2.2 下载AssetBundle1. 非缓存机制非缓存机制通过创建一个WWW实例来下载AssetBundle文件。采用此种方式下载AssetBundle的文件不会存入Unity引擎的缓存区。
3 publicclassBNUDownoad:MonoBehaviour{4 publicstringBundleURL; //定义URL字符串5 publicstringAssetName; //定义资源名字字符串6 IEnumeratorStart(){7 using(WWWwww=newWWW(BundleURL)){//创建一个网页链接请求,并赋给www8 yieldreturnwww; //返回www的值9 if(www.error!=null) //如果下载过程中出现错误10 Debug.Log("WWWdownloadhadanerror:"+www.error);//打印错误的提示信息11 AssetBundlebundle=www.assetbundle; //下载AssetBundle12 if(AssetName=="") //如果没有指定具体的资源名字13 Instantiate(bundle.mainAsset); //实例化主资源14 else15 Instantiate(bundle.LoadAsset(AssetName)); //否则实例化指定名字的资源16 bundle.Unload(false); //释放bundle的序列化数据
第11页10.2AssetBundle的基本使用10.2.2 下载AssetBundle2. 缓存机制缓存机制通过WWW类下的LoadFromCacheOrDownload接口来实现AssetBundle的下载。通过缓存机制下载的AssetBundle会被存储在Unity的本地缓存区中。Unity提供的默认缓存大小在不同平台上也有所不同,在WebPlayer平台上发布的网页游戏默认缓存大小为50MB;在PC客户端发布的游戏和在iOS/Android平台上发布移动游戏默认缓存大小为4GB。4 publicclassBNUDownloadasset:MonoBehaviour{5 publicstringBundleURL; //定义URL字符串6 publicstringAssetName; //定义资源名字字符串7 publicintversion; //定义版本号8 voidStart(){9 StartCoroutine(DownloadAndCache()); //开始缓存机制下载协同程序10 }
第12页10.2AssetBundle的基本使用10.2.2 下载AssetBundle2. 缓存机制11 IEnumeratorDownloadAndCache(){12 while(!Caching.ready) //如果换成没准备好13 yieldreturnnull; //返回空对象14 using(WWWwww=WWW.LoadFromCacheOrDownload(BundleURL,version)){15 //创建一个网页链接请求,并赋给www16 yieldreturnwww;//返回www17 if(www.error!=null)//如果下载过程中出现错误18 thrownewException("WWWdownloadhadanerror:"+www.error);//抛出异常19 AssetBundlebundle=www.assetbundle; //下载AssetBundle20 if(AssetName=="") //如果未指定打包的资源21 Instantiate(bundle.mainAsset); //实例化主资源22 else23 Instantiate(bundle.LoadAsset(AssetName)); //否则实例化指定资源24 bundle.Unload(false); //释放bundle的序列化数据25 }}}
第13页10.2AssetBundle的基本使用10.2.3 AssetBundle的加载和卸载AssetBundle下载完成后,并不能直接被使用,需要将AssetBundle加载到内存中并且创建成具体的文件对象,这个过程就是AssetBundle的加载,需要开发者编写代码实现。
1. 如何加载AssetBundleUnity提供了三种不同的方法来从已经下载的数据中加载AssetBundleAssetBundle.LoadAssetAssetBundle.LoadAssetAsyncAssetBundle.LoadAllAssets下面编写脚本来加载AssetBundle,在C#文件夹下右键单击Create→C#Script创建一个脚本,并命名为“BNULoadAsset”,双击脚本编写代码进行编写,具体实现如下面的代码片段所示。
第14页10.2AssetBundle的基本使用10.2.3 AssetBundle的加载和卸载1 usingUnityEngine;2 usingSystem.Collections; //导入系统相关类3 publicclassBNULoadAsset:MonoBehaviour{4 voidOnGUI(){ //声明OnGUI方法5 if(GUILayout.Button("LoadAssetbundle")){ //创建加载AssetBundle按钮,并判断是否被按下6 AssetBundlemanifestBundle=AssetBundle.CreateFromFile(Application.dataPath7 +"/Assetbundle/AssetBundle"); //首先加载Manifest文件;8 if(manifestBundle!=null){ //如果Mainfest文件不为空9 AssetBundleManifestmanifest=(AssetBundleManifest)manifestBundle.LoadAsset(10 "AssetBundleManifest"); //加载主资源文件的AssetBundle11 AssetBundlecubeBundle=AssetBundle.CreateFromFile(Application.dataPath12 +"/Assetbundle/cubeb"); //加载cube对象的AssetBundle13 GameObjectcube=cubeBundle.LoadAsset("Cube")asGameObject; //获取cube对象14 if(cube!=null){15 Instantiate(cube); //实例化cube16 }}}}}
第15页10.2AssetBundle的基本使用10.2.3 AssetBundle的加载和卸载点击运行按钮之后,案例的运行效果会显示在Game窗口中,在屏幕的左上角有一个加载AssetBundle资源的按钮,如图10-7所示。单击按钮,在窗口中会出现实例化的cube对象,并且在左侧的层次结构中也有显示,如图10-8所示。
图10-7案例运行效果 10-8实例化cube对象第16页10.2AssetBundle的基本使用10.2.3 AssetBundle的加载和卸载2. AssetBundle的卸载
AssetBundle.Unload(flase)说明:false是指释放AssetBundle文件的内存镜像,不包含Load创建的Asset内存对象。
AssetBundle.Unload(true)说明:true是释放那个AssetBundle文件内存镜像和并销毁所有用Load创建的Asset内存对象。
第17页10.3 AssetBundle相关知识10.3.1 管理依赖如果一个共享的依赖资源被包含在每一个使用它的对象中,那么当这些对象被打包时,此部分共享的资源就会被多次打包,这样会造成内存的浪费。为了避免这种浪费,需要将共享的资源打包到一个单独的AssetBundle中,然后让两个模型所隶属的AssetBundle分别依赖于该AssetBundle。
第18页10.3 AssetBundle相关知识10.3.2储存和加载二进制文件下面是一个在AssetBundle中存储和加载二进制数据的案例1 usingUnityEngine;2 usingSystem.Collections;3 publicclassBNUBinarydata:MonoBehaviour{4 stringurl="/mygame/assetbundles/assetbundle1.unity3d"; 5 //定义url字符串6 IEnumeratorStart(){7 WWWwww=WWW.LoadFromCacheOrDownload(url,1);//通过所给的URL开始一个下载8 yieldreturnwww; //等待下载完成9 AssetBundlebundle=www.assetBundle; //加载并且取回AssetBundle10 TextAssettxt=bundle.LoadAsset("myBinaryAsText")asTextAsset;//加载对象11 byte[]bytes=txt.bytes; //检索二进制数据的字节数组12 }}
第19页10.3 AssetBundle相关知识10.3.3 在资源中包含脚本如果你想在AssetBundles中包含代码,就需要将脚本预编译并上传到网站中,摒弃引用Reflection类来实现。
1 usingUnityEngine;2 usingSystem.Collections;3 publicclassIncludescripts
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 提前施工委托书
- 2025年天津b2考货运资格证要多久
- 《型翻转床推广方案》课件
- 2025年山西货运从业资格证考试模拟题库答案大全
- 2025年牡丹江货运上岗证考试题库答案
- 2025年安顺货运从业资格证考题
- 2025年安阳a2驾驶证货运从业资格证模拟考试
- 仿古住宅小区开发协议
- 制造业工伤理赔调解协议
- 公路建设项目招投标难点分析
- 如何制作一个简易的动物细胞模型
- 2024年便携式X光机行业分析报告及未来发展趋势
- 腾讯公司营销策略
- 网络安全与信息保密培训
- 2024年国家电投招聘笔试参考题库含答案解析
- 牛津译林版英语七年级上册期末复习之作文
- 读蔬项目定位方案
- 保安企业承接大型活动安保任务资质评定与管理规范
- 金属挤压共(有色挤压工)中级复习资料练习试题附答案
- 投标报价得分计算表Excele
- 医院放射科辐射评估报告
评论
0/150
提交评论