首页 > 编程知识 正文

unity2018从入门与实战pdf,unity菜鸟教程

时间:2023-05-03 08:33:47 阅读:44289 作者:1161

从资产绑定入门到文章目录从AssetBundle入门到学习1 .什么是资产绑定的定义和作用2 .资产绑定? 3. AssetBundle步骤4 .使用代码总结AssetBundle5. AssetBundle加载和卸载6. AssetBundle分组策略逻辑实体分组注意7.maning

1 .资产绑定定义和角色资产绑定(ab包)是一个资源压缩包,包含模型、地图、预制体、声音以及整个场景,可以在游戏运行时加载。 资产绑定自身保存着彼此的依赖关系; 压缩分组可以使用LZMA和LZ4压缩算法来减小分组大小以更快地进行网络传送; 什么是资产绑定,可以通过将部分可下载内容放入资产绑定来减少安装包的大小? 这是存在于硬盘上的文件。 你可以叫我压缩包。 此压缩包可以视为包含多个文件的文件夹。 这些文件可以分为两大类:序列化文件和资源文件。 (序列化文件和源文件)

序列化文件:资源被分配并放在一个对象上,最后合并为一个文件(

资源文件:某些二进制资源(图像、声音)是单独存储的,可以快速加载。 可以在Editor中读取,更容易确认它是资产绑定对象。 可以使用代码从特定压缩包中加载的对象。 这个对象包含我们添加到这个压缩包中的所有内容,我们可以从这个对象中加载和使用。 3 .资产绑定使用说明

指定资源的资产绑定属性

(xxxa/xxx )其中xxxa生成名为xxx的目录。 “/”可以用于目录拆分,而Remove UnUsed name可以删除未使用的属性名称

生成资产绑定包上传AB包加载AB包和包中的资源4 .使用代码包AssetBundle编辑器扩展方法,将包按钮构建资产绑定资产

用户单元编辑器; using System.IO; publicclasscreateassetbundles { [ menuitem (' assets/buildassetbundles ' } staticvoidbuildallassetbundles ) { string dir } id //buildtargetbuild中出来的用于AB包的平台build pipeline.buildassetbundles (dir,BuildAssetBundleOptions.None,build ttle )

Build路径(可以是硬盘) BuildAssetBundleOptions

buildassetbundleoptions.none :使用lzma算法压缩时,压缩的软件包会变小,但加载时间会变长。 使用前必须整体解冻。 解压缩后,此包将使用LZ4重新压缩。 使用资源时,不需要整体解压缩。 下载时可以使用LZMA算法。 下载后,它将使用LZ4算法本地保存。

buildassetbundleoptions.uncompressedassetbundle :不压缩,软件包大,加载快

buildassetbundleoptions.chunkbasedcompression :使用lz4压缩。 压缩率不如LZMA高,但可以加载指定的资源,而无需解压缩所有资源。

注意:使用LZ4压缩时,的加载速度与未压缩时的加载速度相当,并且小于未压缩文件。压缩方式

如果将需要同时加载的资源放在同一个包中,则每个包之间将存储相互依赖的信息

5. AssetBundle加载和卸载AB加载在开发阶段将AB包放在本地,开发完成后再上传到服务

publicclassloadfromlocal : mono behaviour (privatevoidstart ) ) assetbundleab=asset bundle.load from file (assetbundleleab 安装(obj; } }专用void start () { AssetBundle a

b = AssetBundle.LoadFromMemory(File.ReadAllBytes("AssetBundles/scene/cube.jy")); GameObject obj = ab.LoadAsset<GameObject>("Cube(Clone)"); Instantiate(obj);} IEnumerator Start(){ AssetBundleCreateRequest request = AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes("AssetBundles/scene/cube.jy")); yield return request; AssetBundle ab = request.assetBundle; GameObject obj = ab.LoadAsset<GameObject>("Cube(Clone)"); Instantiate(obj);} IEnumerator Start(){ while (Caching.ready == false) { yield return null; } WWW www = WWW.LoadFromCacheOrDownload(@"file://E:U3D-ProjectsTest2017.2.0AssetBundlesscenecube.jy", 1); yield return www; if (!string.IsNullOrEmpty(www.error)) { Debug.Log(www.error); yield break; } AssetBundle ab = www.assetBundle; GameObject obj = ab.LoadAsset<GameObject>("Cube(Clone)"); Instantiate(obj);} IEnumerator Start(){ string url = @"file:///E:U3D-ProjectsTest2017.2.0AssetBundlesscenecube.jy"; UnityWebRequest request = UnityWebRequest.GetAssetBundle(url); yield return request.SendWebRequest(); //方式一 //AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request); //方式二 AssetBundle ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle; GameObject obj = ab.LoadAsset<GameObject>("Cube(Clone)"); Instantiate(obj);}

AB加载方式:

AssetBundle.LoadFromFile 从本地加载AssetBundle.LoadFromMemory 从内存加载WWW.LoadFromCacheOrDownload 下载后放在缓存中备用(该方法逐渐被弃用)UnityWebRequest 从服务器下载

从AB中加载资源:

AssetBundle.LoadAsset(assetName)AssetBundle.LoadAllAssets() 加载AB包中所有的对象,不包含依赖的包AssetBundle.LoadAssetAsync() 异步加载,加载较大资源的时候AssetBundle.LoadAllAssetsAsync() 异步加载全部资源AssetBundle.LoadAssetWithSubAssets 加载资源及yjdzc资源 AB的卸载 减少内存的使用有可能导致丢失在切换场景,或者确定不使用的时候卸载
AssetBundle.Unload(true) //卸载AB文件的内存镜像,且包含所有Load创建出来的对象
AssetBundle.Unload(false) //卸载AB文件的内存镜像,但是除了Load创建出来的对象
Reources.UnloadAsset(Object) //释放已加载的资源Object
Resources.UnloadUnusedAssets //卸载所有没有被场景引用的资源对象 6. AssetBundle分组策略总结 逻辑实体分组 一个UI界面或者所有UI界面一个包(这个界面里面的贴图和布局信息一个包)一个角色或者所有角色一个包(这个角色里面的模型和动画一个包)所有的场景所共享的部分一个包(包括贴图和模型) 按照类型分组
所有声音资源打成一个包,所有shader打成一个包,所有模型打成一个包,所有材质打成一个包按照使用分组
把在某一时间内使用的所有资源打成一个包。可以按照关卡分,一个关卡所需要的所有资源包括角色、贴图、声音等打成一个包。也可以按照场景分,一个场景所需要的资源一个包 注意 经常更新的资源放在一个单独的包里面,跟不经常更新的包分离把需要同时加载的资源放在一个包里面可以把其他包共享的资源放在一个单独的包里面把一些需要同时加载的小资源打包成一个包如果对于一个同一个资源有两个版本,可以考虑通过后缀来区分,例如v1、v2、v3 7. Manifest文件 什么是Manifest文件


crc为校验码,通过其检查是否完整
Assets 表示包里包含多少资源
Dependencies 表示包有哪些依赖
注意:在加载这些包之前,也需要加载依赖的包,不然会丢失这部分内容,显示效果不正确

通过Manifest文件得到某个包的依赖


可以注意到scene/cube.jy依赖于material.jy,而material.jy依赖于texture.jy

AssetBundle manifestAB = AssetBundle.LoadFromFile("AssetBundles/AssetBundles");AssetBundleManifest manifest = manifestAB.LoadAsset<AssetBundleManifest>("AssetBundleManifest");//GetAllDependencies获取到所有的依赖对象string[] strs = manifest.GetAllDependencies("scene/cube.jy");//将所有依赖对象依次加载出来foreach (var item in strs){ Debug.Log(item); AssetBundle.LoadFromFile("AssetBundles/" + item);}

如此,对象的材质也加载显示出来:

8. 文件校验

CRC、MD5、SHA1都是通过对数据进行计算,来生成一个校验值,该校验值用来校验数据的完整性。
CRC一般用于通信数据的校验,MD5和SHA1用于安全领域,例如文件校验,密码加密等

9. AssetBundles浏览工具

GitHub下载地址

工具面板如下:



Build Target 用于设置AB包的目标平台

OutPut Path 设置AB的输出路径

Build 一键打包

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。