Demo示例——Bundle打包和加载
Unity游戏里面的场景、模型、图片等资源,是如何管理和加载的?
这就是本文要讲的资源管理方式——bundle打包和加载。
图片
Unity游戏资源管理有很多方式:
(1)简单游戏比如demo,可以直接在scene场景中引用住相关资源,然后打出真机包即可。
(2)场景静态引用资源过多会导致loding变慢,为了实现动态加载,加快场景加载速度,可以把资源放到Resources目录下。
(3)但这样还不行,因为没法实现热更新。实际项目大多使用的是AssetBundle,即AB打包方式。
热更新后面再展开讲,本文主要介绍下bundle打包和加载方案。
市面上有不同的AB打包方案和策略,这主要取决于游戏具体情况,包括游戏资源规模、游戏类型等。大致讲下几种方案的优缺点:
(1)直接打包prefab和scene。
优点是不用关心资源依赖关系,直接对prefab或scene打包即可,unity会自动把其依赖资源都打进同一个包里。缺点是造成资源冗余,包体变大。
(2)收集prefab和scene的依赖资源,先对依赖资源打包,再对prefab和scene打包,同时维护依赖关系,加载时要用到。
而对依赖资源打包又有不同的策略:比如将依赖资源和prefab/scene打到同一个包;将每个依赖资源单独打成一个个散列包;将被两个以上其他资源依赖的公共资源单独打一个包......
优点是可以定制适合游戏项目的依赖资源打包策略,可以避免资源冗余,减小包体;缺点是当依赖关系异常复杂时,可能会疯,比如场景A的依赖prefab A1-A100,prefab A1-A100各自又依赖一堆资源,且互相存在资源重叠......而且在加载Bundle时可能会引起内存峰值爆炸。
(3)各个项目的黑科技方案,模拟Unity的资源管理。篇幅有限,且属于进阶内容,本文就不深入讲了,有兴趣的可以关注公众号私聊或加微信。
这里来看一下Unity的资源打包和加载实现Demo例子。
Demo需求:一个场景,3个shader,使用AB方式打包,并加载到安卓真机显示。
(1)打包
首先,我们总共打2个AB包:shader单独打一个AB包,场景单独打一个AB包。Unity的打包API是BuildPipeline.BuildAssetBundles,打包代码如下:
图片
然后就可以点击进行打包
图片
打包结束之后,可以看到以下bundle,除了生成shaderbundle和scenebundle,还自动生成了与目录同名的AB,以及每个bundle对应的manifest文件。
图片
其中AB.manifest记录了本次打包的所有bundle资源及其依赖关系,该文件可用于加载。可以看到scenebundle依赖shaderbundle。
图片
其他两个manifest文件则是只用于编辑器打包调试辅助,包含每个bundle包含的asset资源、依赖的其他bundle资源。
图片
图片
(2)加载
游戏启动之后显示一个UI界面,自动加载shader资源。同时提供一个按钮,点击之后加载场景。界面逻辑代码如下:
图片
加载场景,应该先加载其依赖资源。上面我们知道场景依赖shader,所以这里就跳过收集依赖关系的逻辑了。
先加载shader资源,这里使用的是AssetBundle.LoadFromFileAsync这个Unity API。
图片
然后加载场景资源。
图片
(3)工程构建
最后打出apk真机包,可以使用编辑器构造。
图片
最后生成如下apk包。即可安装到真机。
图片
最终结果如下:真机启动游戏,显示界面。
图片
点击按钮,加载场景。完成。
图片
本节内容就介绍到这里,有问题欢迎留言或私聊~~~
欢迎关注我的微信公众号【unity大话东游】,更多的unity技术类和渲染类文章等着你哦!

Demo示例——Bundle打包和加载的更多相关文章
- unity ab包打包和加载的简单学习示例
闲着没事结合项目看了下unity AssetBundle打包和使用,写了一些测试例子,需要的可以拿去,导入一个空项目即可 链接:https://pan.baidu.com/s/1H85dnMNkRoW ...
- Unity热更新学习(一) —— AssetBundle 打包和加载
理论不多说,网上,官方文档都有. 这里有一篇介绍很全面的文章:https://www.cnblogs.com/ybgame/p/3973177.html 示例和注意点记录一下,用到时以便查阅. 一. ...
- Unity最新版打包AssetBundle和加载的方法
一.设置assetBundleName二.构建AssetBundle包三.上传AssetBundle到服务器四.把AssetBundle放到本地五.操作AssetBundle六.完整例子七.Asset ...
- Android之RecyclerView轻松实现下拉刷新和加载更多
今天研究了下RecyclerView的滑动事件,特别是下拉刷新和加载更多事件,在现在几乎所有的APP显示数据列表时都用到了.自定义RecyclerView下拉刷新和加载更多听上去很复杂,实际上并不难, ...
- unity3d进行脚本资源打包加载
原地址:http://www.cnblogs.com/hisiqi/p/3204752.html 本文记录如何通过unity3d进行脚本资源打包加载 1.创建TestDll.cs文件 public c ...
- linux 编译,链接和加载
1. 序 最近在折腾各种.so,碰到了一些问题,一开始对于很多错误也没有头绪,茫然不知所措.索性化了一天多时间将<<程序员的自我修养—链接.装载与库>>中部分内容略读了一遍 ...
- unity创建和加载AssetBundle
先说一下为什么要使用AssetBundle吧,以前做东西一直忽略这个问题,现在认为这个步骤很重要,代码是次要的,决策和为什么这样搞才是关键. 一句话概括吧,AssetBundle实现了资源与服务分离, ...
- XBIM 基于 WexBIM 文件在 WebGL 浏览和加载
目录 xBIM 应用与学习 (一) xBIM 应用与学习 (二) xBIM 基本的模型操作 xBIM 日志操作 XBIM 3D 墙壁案例 xBIM 格式之间转换 xBIM 使用Linq 来优化查询 x ...
- Android Demo 下拉刷新+加载更多+滑动删除
小伙伴们在逛淘宝或者是各种app上,都可以看到这样的功能,下拉刷新和加载更多以及滑动删除,刷新,指刷洗之后使之变新,比喻突破旧的而创造出新的,比如在手机上浏览新闻的时候,使用下拉刷新的功能,我们可以第 ...
随机推荐
- .NET NuGet整理
分布式缓存框架: Microsoft Velocity:微软自家分布式缓存服务框架. Memcahed:一套分布式的高速缓存系统,目前被许多网站使用以提升网站的访问速度. Redis:是一个高性能的K ...
- WPF中使用OpenFileDialog打开文件
添加Microsoft.Win32程序集 private void OnOpenFile(object sender, EventArgs e) { OpenFileDialog openFileDi ...
- linux系统挂载磁盘
linux系统挂载磁盘 ## 将硬盘挂载到/mnt/disk1下 # 检查磁盘状态,确认分区 fdisk -l # 格式化磁盘(分区) mkfs.ext4 /dev/sda #根据机器上的命名 以sd ...
- salesforce零基础学习(一百一十二)项目中的零碎知识点小总结(四)
本篇参考: https://trailblazer.salesforce.com/issues_view?id=a1p4V0000003znDQAQ https://salesforce.stacke ...
- ssl 证书配置
方式1: 1:找见域名列表 2: 主机记录 *,@,www 2:证书申请并下载 3: 4:宝塔网站ssl 参考博客: https://developer.aliyun.com/article/7714 ...
- 微信退款通知,退款回调数据解密.SHA256签名AEAD_AES_256_GCM解密
$xmlResult = file_get_contents("php://input");//获取微信的数据$result = $this->xmlToArray($xml ...
- 一比一还原axios源码(五)—— 拦截器
上一篇,我们扩展了Axios,构建了一个Axios类,然后通过这个Axios工厂类,创建真正的axios实例.那么今天,我们来实现下Axios的拦截器也就是interceptors.我们来简单看下Ax ...
- LGP3703题解
不会数据结构石锤了/kk 题意清晰. 我们看到 \(1\) 操作比较奇怪,考虑从 \(1\) 操作入手. 设 \(f_u\) 为 \(u\) 到根节点一共有多少种颜色,我们使用树剖来维护这个东西. 考 ...
- 网易互娱23届实习笔试_3x3锯齿数独
一.输入: 输入一个3x3数独,字符'.'代表空输入三个宫的域,每个宫包括三个位置,[0,0]表示0行0列 二.输出要求: 1.每个宫里最终123各出现一次, 2.数独中的行列里不出现重复字符: 输出 ...
- 除非Windows Activation Service (WAS)和万维网发布服务(W3SVC)均处于运行状态,否则无法启动网站。
解决办法: 打开WINDOWS服务管理方法: 进入服务有二种方法: 1.开始-控制面板-管理工具单击,找到"服务"双击打开 在WINDOWS服务管理里 启动 World Wide ...