Unity3D 自动打包整个项目(以AssetBundle实现)
需求:
在移动开发中,手动控制资源的加载、释放和热更新,是很有必要的。
而Unity通过AssetBundle可以实现该需求,但是如果项目资源多起来的话一个个手动打包成AssetBundle则很麻烦。
而本文正为此提供一套一键打包的方案。
资源分类、加载和实例化过程:
分类资源:
先将游戏资源分类,这里说的分类不是按资源类型(声音、贴图等)来分,而是按照打包进同一个AssetBundle的资源来分。 一般游戏按照使用频率、游戏流程、资源大小来分到不同的AssetBundle中。
举个例子:一个跑酷游戏,可将资源分为: 开始界面,主界面,关卡一资源,关卡二资源,主界面和各关卡的共享资源(如角色服装),各关卡间的共享资源(如血条,金币)。注意这里说的资源是图片,模型,声音等一些体积较大的文件。
加载资源:
游戏流程中AssetBundle的加载及卸载:
将“场景内所有GameObject”变为Prefab并打打包成AssetBundle:
在上一步中,只是将资源打包成AssetBundle,而驱动游戏进行的游戏逻辑(场景上的GameObject)则没做处理。
这样的话会导致打包出来的游戏包重复包含资源(AssetBundle和场景GameObject引用的资源重复)。
所以我们需要将场景上的GameObject也一并打包成AssetBundle,在游戏真正运行时才加载该AssetBundle并实例化。
拿unity 2d例程(2DPlatformer)做说明,即将Scene里的所有文件变为一个GameMain.Prefab,并导出为AssetBundle。
用于在之后的游戏运行后加载并实例化。
那么上一步的流程将会变为:
标记项目资源:
分类加载的思路有了,现在只差一个自动将所有资源打包成AssetBundle方法。
我们需要借助Asset Labels(Unity的标签系统)。
思路是按资源的不同分类(前文提及的分类方式),来标记每个资源。
举个例子:
上面4个资源属于关卡1的资源,因此我将他们同标记为AsRes_Level1,
他们将会一起打入AsRes_Level1.assetbundle包中,以备游戏中加载。
需要注意的是,其中AsRes_是固定标识,以便打包脚本分辨。
用这种方法则可将游戏资源一一归类。
但是,我们还有一个麻烦,就是需要先将比较笨重的资源(图片,声音,模型)先打包,然后再将驱动逻辑(例如,前面说的GameMain.Prefab)打包,
只有按这样的顺序打包才能使驱动逻辑引用到之前的打包的美术声音资源。
解决方法也比较简单,将驱动逻辑标记为AsPack_即可。
OK,就这样将整个项目的资源标记好之后就可以进行一键打包了。
例程:
为了更好的说明,我利用Unity的2DPlatformer做了一个样板工程。
其中 Editor/ResPacker.cs 是打包脚本,会在菜单Assets下新建“Build All Assets To Bundle” ,用于一键打包。
_Loader/Test_Loader.unity 是测试场景,用于加载位于StreamingAssets下的AssetBundle,并实例化‘驱动逻辑’(GameMain)。
例程下载。
注意:
在例程中有一个Bug,在编辑器中导入AssetBundle包的话,会使Sprite 上Sorting Layer变为Default,而导致图层混乱,而Build这个场景出来之后再运行则不会。
Unity3D 自动打包整个项目(以AssetBundle实现)相关推荐
- 解放双手 | Jenkins + gitlab + maven 自动打包部署项目
前言 记录 Jenkins + gitlab + maven 自动打包部署后端项目详细过程! 需求背景 不会偷懒的程序员不是好码农,传统的项目部署,有时候采用本地手动打包,再通过ssh传到服务器部署运 ...
- [Unity3d][NGUI]打包NGUI预制件成Assetbundle 两种思路.
http://www.58player.com/blog-2537-85030.html 接上文,项目中因为需要UI热更新,所以我使用了AssetBundle这个解决方案. ...
- Windows 下 android自动打包 volley项目
最近发现了Google的volley项目.Volley就是一个帮助Android开发者更简单,更高效的处理网络请求的库,解决了使用原生库请求网络的各种问题.而且速度和稳定性都很不错. 其主要特征如有: ...
- 安装Jenkins及配置自由风格自动打包部署
安装Jenkins 拉取Jenkins镜像 docker pull jenkinsci/blueocean 运行镜像 docker run -u root -d -p 8080:8080 -p 500 ...
- jenkins android md5,Jenkins配置自动打包 -- 遇到的坑
1.把gradle路径设为本地路径 Jenkins部署在远程linux服务器上,使用git将代码下载到服务器路径下后,无法使用gradle命令 因为默认配置都是gradle同步时 实时从网上下载,进入 ...
- ant自动打包多个android项目为apk
为什么80%的码农都做不了架构师?>>> 最最近项目要实现一个自动打包的功能,网上参考了不少资料,觉得还是使用ant打包比较方便. 到最后的写出的配置信息如下所示: build ...
- Android-Ant自动编译打包android项目 -- 2 ----签名与渠道包
上篇介绍了怎么使用ant自动编译打包现有的android项目,这篇将继续介绍如果如何在ant打包应用的时候加入签名信息以及自动打包渠道包. 1. 加入签名信息: 在项目的根目录下建一个ant.prop ...
- vite项目在jenkins自动打包报错:failed to load config from ../vite.config.js You installed esbuild on
vite项目在jenkins自动打包报错找不到esbuild-linux-64 在window环境开发用的找不到esbuild-windows-64,在linux环境构建需要使用esbuild-lin ...
- Springboot项目自动打包部署插件 (wagon-maven-plugin)
Springboot项目自动打包部署插件 (wagon-maven-plugin) pom.xml文件添加配置: <properties>中添加: <service-path> ...
最新文章
- Beep()之我迷糊了……
- LaTeX入门第二集!LaTeX的几个示例!
- 下载数据CityEngine示例数据(Tutorial)配套视频教程(英文)
- 一、.NET中的网络组件
- php获取手机目录,php如何获取手机型号
- C++中对字符串的分割方法
- EasyUi各种消息框
- Windows Phone 7一周年生日
- 流畅的python不适合初学者_年度最值得关注Python进阶书——《流畅的Python》
- 如何理解keras中的shape/input_shape
- matlab画s域零极点图,信号与系统的S域分析.ppt
- 定义一个鸭子的类java_2019-02-11——Java 鸭子模型
- 义隆单片机可用c语言写了吗,义隆单片机编程时应注意的几点
- 游戏中BUFF的实现
- LT8911EXB:MIPI CSI/DSI转EDP信号转换芯片-润百信科技提供技术批量支持
- TS文件下载器(按照M3U8列表 批量下载)
- AndroidHttpCapture---手机轻松抓包工具
- C语言用计算机打印一只猫,浅析C语言在计算机中的应用
- 流水账之 QQ农场 (VS) 农民伯伯的农场
- Datetimepicker.js用法