您的位置:首页 > 移动开发 > Unity3D

浅尝Unity 3D的Asset Bundle知识(一)

2015-06-24 09:50 369 查看
这是小生的正式第一篇科技文章,个人自认为写作文不是强项,但是会尽力把自己的学习成果写成让大家易于理解的内容,如果内容中有不足或者错误的地方,还请各位看官多多指教和包涵。小生先在此有礼了。


言归正传,由于小生现在就职一家游戏公司,自然工作就是多少和游戏有些关系喽,小生公司一直在开发一款手游应用。游戏的客户端就是用的Unity 3D进行开发的,由于小生是初次来做游戏这个东西,以前是PHP的处理端开发现在转成Client的开发,所以各种各样的学习任务也就都冒了出来。这次就是主要来总结一下公司最近给安排的一项任务-----如何给现在的游戏做Asset Bundle。

说到Asset Bundle这个东西,先讲讲本人的一些认知喽。到底Asset Bundle是个什么东西呢,从字面来看[Asset]的字面意思是[资产],[Bundle]的意思是[束],那结合起来就是[资产束],这个听着也太别扭了,小生就给它起了个自己容易理解的解释-----[资源包],下文的内容资源包就是指代Asset Bundle。(不知道各位大牛是如何理解的呢

)。

那到底这个资源包是主要来干什么的呢,查看各种百度,谷歌的资料,小生主要感觉这个资源包是来完成以下几点使命的。

1.资源的热更新。

说到这点,小生感觉这点也就是项目要设立资源包的初衷了。首先说一下,什么时候游戏才需要做热更新。说个简单的比喻吧(这里主要是对iphone手游做基准)玩过手游的人都知道,有时候下载完的游戏游玩之后,过了几天游戏官网说了添加了什么什么新游戏主角,正巧你这个时候也刚刚打开游戏要开始娱乐。但是有一个地方大家或许注意到,平常的时候打开游戏的时候读取进度条特别快就完事儿了,而今天在读取进度条的时候比较慢,有的游戏会显示[更新中。。。]这种字样的进度条。等进度条走完之后进入游戏,唉!游戏里多出了之前没有的很多内容。

可能大家会奇怪自己也没有更新app store的app啊,那这些东西就怎么进到游戏里来的呢。嘿嘿,想必我不说大家也知道了,那就是这个Asset Bundle起的作用喽!

2.减小初次下载游戏的体积

说到减小游戏的体积,小生的字面的意思说得比较范范可能不好理解,举例子说就是你在app store看好个游戏,10GB的size。你怎么办?问我的话,第一我坚决的要连上wifi来下载了,不然就要欠docomo房产了(开玩笑的,欠不了的,我的套餐是用完就降速后免费无限用的那种)。

外加还的连上充电器,不然中途没电没保存上,重新下载那就真让人稀碎加崩溃了。如果碰到没有耐心的GGMM的话,那人家索性不下了玩别的游戏去了。这样的情况下损失客户就真是让开发商糟心了。所以Unity公司嘛早有先见之明,研究出了资源包的这个东西,让你起初把游戏做好,之后把能做成资源包的都做成资源包,然后都放到服务器上(可能除去资源包后剩下的游戏主体部分也就几十MB了)。这么做后,把游戏的主体部分(小生认为这个部分应该包含的就是游戏启动初期的必要脚本还有资源,不然都放到服务器上了也没多大意思了)传到app
store上去。

当你下载了主体部分到手机后启动游戏的时候,应该有人会注意到有类似的提示就是[要下载所需的资源包xxx]。这个时候就是游戏客户端从放置Asset Bundle的服务器下载所需的资源包呢!

3.按需加载

从上面两点来看,我想大家也是多少理解了关于资源包的使命了。结合第二点,第三点要说的就是类似于提升的一个阶段了。因为你在做游戏的时候有很多素材,一口气把项目的所有素材都读取进来的话,多少感觉是不太合适的。(比如说素材总大小10GB)

这个时候就是需要按照2点所说的要把资源做成零散的资源包后,然后通过游戏中的脚本逻辑来控制到底需要哪些资源包,然后根据需要来在特定的时候加载特定的资源。这样就可以减少你的手机流量喽。比如说你在玩儿qq游戏的雷霆战机,但是你就是玩儿其中的过关部分,别的游戏部分都没玩儿,如果这个时候要是下载资源包的时候把不玩儿的部分也下载下来的话(比如说过关游戏的资源是5MB,其他部分总和是10MB),对流量的浪费是一个,第二个就是遇到网速不够快的时候你就要开始做好等,等,等的心理准备了。

但是只是加载过关部分的话,我想你就能省下10MB的流量和下载10MB所需要的时间了。可能有些技术者就要说了,那下载完了之后以后就不需要下载了啊,不也省事儿了嘛。

对于这个问题,其实小生也是考虑过的。但是个人是推荐还是按需下载的好,既然推荐就得说说自己的理由不是。那小生就在此献丑了


1)如果遇到经常更新的部分,比如说频度在一周1次以上的情况下。记得以前看过一篇cnbeta的文章说,安装系统浪费的时间。对一个人来说可能是半个小时,但是对于庞大的用户群来说,加起来的话那就是个不可小视的数目了。所以我们要以节省用户的时间为宗旨不是。不然我们就要成为浪费时间的罪人了。


2)打包和上传的话,如果总体资源的包超过一定大小的话,你上传和拷贝外加备份都是要花不少时间的。但是如果打散后打包的话,你可以说对个别的进行更新,而不需要更新的就还是原封不动放那就可以了。总结说就是只是更新需要更新的部分。这个地方就需要用到了dependency这个功能了。但是这个功能怎么用呢,我想先不学会基本的制作的话,是无法完全理解的。

如果大家感兴趣,请关注小生的关于本题目的第二篇------打包初级篇!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: