当前位置:网站首页>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中都含有一套一样的贴图和材质
边栏推荐
- 2022-07-27日报:IJCAI 2022杰出论文公布,大陆作者中稿298篇拿下两项第一
- 关于印发《深圳市工业和信息化局绿色制造试点示范管理暂行办法》的通知
- [ManageEngine] what is Siem
- Visual system design example (Halcon WinForm) -10. PLC communication
- TXT把换行 替换为空格或者取消换行
- SkyWalking分布式系统应用程序性能监控工具-中
- 网络设备硬核技术内幕 路由器篇 10 CISCO ASR9900拆解 (三)
- Stm32f103c8t6 drives sh1106 1.3 "IIC OLED display under Arduino frame
- Is it safe for Guosen Securities to open a mobile account? Is Zhongshan securities reliable
- DirectX 入门知识
猜你喜欢

Visual system design example (Halcon WinForm) -9. text display

【WORK】关于技术架构

Visual system design example (Halcon WinForm) -10. PLC communication

4种单片机驱动继电器方案

Jmeter录制接口自动化

DIY制作示波器的超详细教程:(一)我不是为了做一个示波器

Do you really understand CMS garbage collector?

Kubernetes CNI classification / operation mechanism

Graphical SQL is too vivid

STM32F103C8T6在Arduino框架下驱动SH1106 1.3“ IIC OLED显示
随机推荐
Dynamic programming - stock trading 5
网络设备硬核技术内幕 路由器篇 20 DPDK (五)
USB2.0接口的EMC设计方案
[ManageEngine] what is Siem
TCC
网络设备硬核技术内幕 路由器篇 18 DPDK及其前传(三)
Visual system design example (Halcon WinForm) -10. PLC communication
STM32 CAN 通信 滤波设置问题
web上构建3d效果 基于three.js的实例
An example of building 3D effects on the web based on three.js
LeetCode 74. 搜索二维矩阵 二分/medium
Dialog manager Chapter 3: create controls
网络设备硬核技术内幕 路由器篇 17 DPDK及其前传(二)
Confirm the time accuracy of the power supply setting voltage through the i/o function of vn1630/vn7640
如何帮助企业优化Office管理
TXT把换行 替换为空格或者取消换行
Is it safe for Guosen Securities to open a mobile account? Is Zhongshan securities reliable
事务_基本演示和事务_默认自动提交&手动提交
LeetCode 781. 森林中的兔子 哈希表/数学问题 medium
移动端使用vantUI的list组件,多个tab项来回切换时,列表加载多次导致数据无法正常展示








