当前位置:网站首页>AssetBundle如何打包
AssetBundle如何打包
2022-07-27 14:15:00 【傻子是小傲娇】
AssetBundle是什么?
AssetBundle是一个存档文件,包含可运行时加载的特定于平台的资源(模型、纹理、预制体、场景)
AssetBundle可以表达彼此之间的依赖关系,AssetBundle A中的材质可以引用AssetBundle B中的纹理
为通过网络进行有效传递,可以根据用例要求选用内置算法来压缩(LZMA,LZ4)
LZMA算法:压缩的包更小,加载时间更长。使用之前需要整体解压。一旦被解压,这个包会使用LZ4重新压缩。这时候使 用资源的时候不需要整体解压。
LZ4算法:加载时间与不压缩相近,使用前不用整体解压。
1.用于可下载内容,减小初始安装大小。
2.加载针对于最终用户平台优化的资源,减轻运行时内存压力
3.需要更新一些简单的东西,如节日活动的UI需要更改之类的,可以使用AssetBundle包去更新而不需要用户重新下载游戏
AssetBundle中有什么?
包含磁盘上的实际文件,称为AssetBundle存档,可以视为一个容器,可以在其中包含其他的文件。这些文件分为两类:
1.serialized file(序列化文件):资源被打碎放在一个对象中,最后统一被写进一个单独的文件(只有一个)
resource files(源文件):资源文件只是为某些资源(纹理,音频)单独存储的二进制数据块,允许我们有效地在另一个线程上从磁盘上加载它们
2.AssetBundle对象:通过代码从一个特定的压缩包中加载出来的对象,此对象包含了所有我们当初添加到这个压缩包里面的内容,我们可以通过这个对象加载出来使用
AssetBundle使用流程:
1.指定资源的AssetBundle属性
在要打包的资源的Inspector面板中指定AssetBundle的属性
2.构建AssetBundle包
创建Editor文件夹,在文件夹中创建一个C#脚本,代码为:
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using System.IO; public class CreateAssetBundles{ /*MenuItem属性允许你添加菜单项到主菜单和检视面板上下文菜单。 该属性把任意静态函数变为一个菜单命令。仅静态函数能使用这个MenuItem属性*/ [MenuItem("Assets/Build AssetBundles")] static void BulidAllAssetBundles() { string dir = "AssetBundles"; if (Directory.Exists(dir) == false) Directory.CreateDirectory(dir); //输出路径 打包压缩格式 打包到的平台 BuildPipeline.BuildAssetBundles(dir, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64); } }BuildAssetBundleOptions.None:使用LZMA算法压缩
BuildAssetBundleOptions.UncompressedAssetBundle:不压缩,包大,加载快 BuildAssetBundleOptions.ChunkBasedCompression:使用LZ4压缩
通过 MenuItem我们在Unity的Asset选项中创建了Bulid AssetBundles选项调用此代码将资源打包到dir指定的目录中
在项目的文件中就可以看到我们打包出来的AssetBundles包了
游戏发布后需要AssetBundle包在服务器上,这时我们才需要游戏从服务器下载AssetBundle包进行加载,开发时因为需要进行频繁的调试,我们将包放在本地来进行加载
3.在本地对AssetBundle进行加载和使用:游戏场景中创建空物体挂载脚本,内容为:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class LoadWallFormFile : MonoBehaviour { // Use this for initialization void Start () { //1.加载AssetBundle AssetBundle ab = AssetBundle.LoadFromFile("AssetBundles/wall.dz"); //2.从AssetBundle中取得要加载的资源 GameObject wallPrefab = ab.LoadAsset<GameObject>("Wall"); //3.把资源实例化到场景当中 Instantiate(wallPrefab); } }这样就可以在场景中看到之前我们打包好的东西了
AssetBundle分组策略:
指定资源的AssetBundle标签其实就是一种对资源的分类
1.经常更新的资源放在一个单独的包,与不经常更新的包分离
2.需要同时加载的资源(小资源)放在一个包里
3.其它包共享的资源放在一个包中(减小AB包的大小)
4.同一个资源有两个版本可以考虑通过后缀来区分对于第三点,存在共享的资源怎么进行依赖打包的案列:
如图场景中存在一个sphere和cube,都使用了名为wood的材质
假如我们没有采用依赖打包,那么就会出现下图中左边的情况,AB包中为sphere和cube打包的文件中,包含着一样的贴图和材质,如果我们采用右边的依赖打包方案,就能对包的大小进行一个优化
首先将要共用的贴图和材质的AssetBundle设为share
再为cube和sphere分别设置一个AssetBundle的属性,名字随意
观察再次打包出来的文件,cube和sphere的文件大小都很小了,share的大小是最大的
而如果没有对要共用的资源设置AssetBundle的标签的话,打包出来就会如下图一样,cube和sphere中都含有一套一样的贴图和材质
边栏推荐
- Timestamp of AAC, h264, etc
- How to do well in enterprise system vulnerability assessment
- LeetCode 781. 森林中的兔子 哈希表/数学问题 medium
- 多表查询_子查询概述和多表查询_子查询情况1&情况2&情况3
- STM32F103C8T6在Arduino框架下驱动SH1106 1.3“ IIC OLED显示
- LeetCode 191. Number of 1 Bits(位1的个数) 位运算/easy
- 如何帮助企业优化Office管理
- Notice on printing and distributing the Interim Measures for the administration of green manufacturing pilot demonstration of Shenzhen Bureau of industry and information technology
- 于不确定中见“安全感” 沃尔沃2022年中问道
- Visual system design example (Halcon WinForm) -9. text display
猜你喜欢

Kubernetes CNI classification / operation mechanism

The mobile terminal uses the list component of vantui. When multiple tab items are switched back and forth, the list is loaded many times, resulting in the failure of normal display of data

LeetCode 783. 二叉搜索树节点最小距离 树/easy

See "sense of security" in uncertainty Volvo asked in 2022

JUC(JMM、Volatile)

LeetCode 781. 森林中的兔子 哈希表/数学问题 medium

光电隔离电路设计方案(六款基于光耦、AD210AN的光电隔离电路图)
仪表放大器和运算放大器优缺点对比

基于FIFO IDT7202-12的数字存储示波器

USB2.0接口的EMC设计方案
随机推荐
Nefu119 combinatorial prime [basic theorem of arithmetic]
网络设备硬核技术内幕 路由器篇 3 贾宝玉梦游太虚幻境 (中)
Internship: compilation of other configuration classes
Wechat applet realizes music search page
基于FIFO IDT7202-12的数字存储示波器
腾讯二面:@Bean 与 @Component 用在同一个类上,会怎么样?
STM32学习之CAN控制器简介
TL431-2.5v基准电压芯片几种基本用法
[ManageEngine] what is Siem
DirectX 入门知识
Kubernetes CNI classification / operation mechanism
【云享读书会第13期】多媒体处理工具 FFmpeg 工具集
TXT把换行 替换为空格或者取消换行
Stm32f103c8t6 drives ssd1306 0.96 "IIC OLED display under Arduino frame
Getting started with DirectX
泛型
The database uses PSQL and JDBC to connect remotely and disconnect automatically from time to time
仪表放大器和运算放大器优缺点对比
Hdu3117 Fibonacci numbers [mathematics]
Notice of Shenzhen Municipal Bureau of human resources and social security on the issuance of employment related subsidies for people out of poverty








