原地址:http://blog.csdn.net/huang7jiao/article/details/18370653

需求:

在移动开发中,手动控制资源的加载、释放和热更新,是很有必要的。

而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实现)的更多相关文章

  1. docker 运行jenkins及vue项目与springboot项目(三.jenkins的使用及自动打包vue项目)

    docker 运行jenkins及vue项目与springboot项目: 一.安装docker 二.docker运行jenkins为自动打包运行做准备 三.jenkins的使用及自动打包vue项目 四 ...

  2. 自动打包iOS项目

    基于Lexrus的博文iOS-makefile,本文对自动打包涉及到的操作步骤以及理论基础进行了适当的补充.     请在阅读本文前先阅读<iOS makefile>.文章地址:http: ...

  3. 解放双手 | Jenkins + gitlab + maven 自动打包部署项目

    前言 记录 Jenkins + gitlab + maven 自动打包部署后端项目详细过程! 需求背景 不会偷懒的程序员不是好码农,传统的项目部署,有时候采用本地手动打包,再通过ssh传到服务器部署运 ...

  4. [Unity3d][NGUI]打包NGUI预制件成Assetbundle 两种思路.

    http://www.58player.com/blog-2537-85030.html 接上文,项目中因为需要UI热更新,所以我使用了AssetBundle这个解决方案.               ...

  5. jenkins自动打包部署项目

    首先去jenkins的官网下载安装包 https://jenkins.io/   个人下载是长期稳定的那个版本,下载后,得到一个.msi的安装包: 点击进行安装,然后一直点击下一步. jenkins会 ...

  6. docker 运行jenkins及vue项目与springboot项目(二.docker运行jenkins为自动打包运行做准备)

    docker 运行jenkins及vue项目与springboot项目: 一.安装docker 二.docker运行jenkins为自动打包运行做准备 三.jenkins的使用及自动打包vue项目 四 ...

  7. ANT自动打包U3D安卓项目研究笔记

    概述 因项目使用Atlassian Stash作为项目源码管理端,且其支持Ant命令自动编译,可使其根据最新的代码自动打包,故产生该研究Ant打包的任务.在此将研究过程及一些相关知识整理记录在此. 本 ...

  8. unity3d在菜单栏,一键设置Player setting及自动打包并设置apk的存储位置

    项目进行中,领导要求能够进行一键设置Player settings及自动打包并设置apk的位置,所以自己就上网搜索了很多大神的文章.最后是完成了领导需要的功能,在这里记录并分享一下(此项指针对安卓ap ...

  9. 关于unity3d插件的自动打包

    开发中,迩可能会遇到在xcode里添加一些需要调用原生api的方法,可能是game center,可能是内购之类的,但是这些插件实在太多了,所以迩大可不必自己写这些插件,问题在于,国内的一些插件,像9 ...

随机推荐

  1. winform版简易http服务器

    传人url运行(url以/结尾,例如:http://localhost:8080/web/ 监听这个url// 在浏览器 中输入 http://localhost:8080/web/?name=tes ...

  2. oracle trunc 函数处理日期格式

    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;  --显示当前时间 2011-12-29 16:24:34 select trun ...

  3. ios 多线程-GCD-NSOperation

    一.线程间的通讯 1.使用NSObject类的方法performSelectorInBackground:withObject:来创建一个线程. 具体的代码:隐式创建,自动启动 [Object per ...

  4. iOS UIView 快速修改 frame

    我们修改frame中的某个值,需要进行繁琐的书写,例如: (1). 直接设置位置大小 view.frame = CGRectMake(0, 0, 320, 150); (2). 只修改某个值 view ...

  5. OC10_文件练习

    // // TextHander.h // OC10_文件练习 // // Created by zhangxueming on 15/6/19. // Copyright (c) 2015年 zha ...

  6. javascript笔记——jqGrid 格式化时间列

    { name:'startTime', sortable:false, editable:true, width:300, sorttype:'date', //unformat:startTime, ...

  7. 关于IE8以上 不引人css 症状

    不知道各位有没有体验过 这样的状况  在同一个文件夹中 <!DOCTYPE html> <html> <head> <meta charset="u ...

  8. c# winform 点菜宝接口demo程序

    前几天写了一篇关于c#调用 win32API的文章,有同学对点菜宝接口感兴趣,所以就把写的demo程序共享出来,大家一起讨论改进,so放百度云地址: 百度云下载地址

  9. 30分钟搭建一个小型网站框架(python django)

    最近因为要做一个小型的网站,需求很简单有点像公司内部的管理网站,和室友一起倒腾,发现了一些坑.我自己之前没有接触过python 但是发现真的非常好上手. 我们没人会前端,所以最怕修改网页,一开始选择了 ...

  10. opencv 手写选择题阅卷 (一)表格设计与识别

    (一)答题表格设计与识别 实际设计好的表格如下图 为了图像精确,表格和四角的标记都是由程序生成的,文字和数据是后期排版软件添加上去的. 图中四角的四个黑方块主要用来定位表格,然后就可以切割出每个单元格 ...