Cocos Creator 2.0 之后推出了AssetBundle系统,类似于Unity3D的AssetBundle。先简单讲一下AssetBundle的原理作用,不涉及具体引擎的具体细节,各个游戏引擎之间也略有差异。
  AssetBundle是将游戏中使用的资源分成若干个包,这样做的意义在于减少安装包的体积,让用户快速下载并进入游戏,剩下的资源包在游戏过程中后台下载,甚至可以在需要使用某一整块的资源时再下载,节约用户的流量
  另外,可以给AssetBundle增加版本管理,这可以针对不同的玩家提供不同版本的资源,比如针对不同地区的玩家提供不同的语言包。同时,也能够热更新资源。
  在Unity3D中,C#是静态语言,安装之后就无法通过AssetBundle或其他方式更新脚本了(不采用动态库的情况下)。但是,依然可以对传统的文本、声音、图片、动画等资源更新,并且可以通过修改挂载在预制上的脚本中的参数,实现某些更新需求。腾讯提供XLua框架,C#+lua脚本的方式实现Unity3D下的热更新方案。但必须预先由C#提供好接口,并且两种语言开发,负担也不小。
  Cocos Creator 是支持javascript/typescript语言的,本身就是动态脚本运行,那么是否可以在不重启游戏的情况下实现热更新
  下面我以大厅+子游戏为需求背景,在Cocos 技术栈内,列举几个本人或设想或接触或实现的几种方式。

1. H5形式的子游戏
2. Cocos2d-x + lua
3. Cocos Creator 分包下载资源
4. Cocos Creator 新版本支持AssetBundle

 1. H5形式的子游戏

  每个子游戏以网页游戏的方式提供,因为是网页版,所以不存在热更新问题,只要保证新的文件与旧的需要替换的文件名不同就行,一般是在文件名中包含文件的md5。大厅可以选择多种形式,原生安卓可以,cocos工程可以,其实微信小游戏也可以算这种形式,只是运行环境不是原生的浏览器环境。
 
  这种形式有以下优点:
  1. 子游戏只需要提供网页版,不需要嵌入到大厅,可以自由独立开发,不拘泥于引擎,如果是第三方提供子游戏内容,这是最简单的方法。
  2. 非嵌入式,子游戏之间不会相互影响,也不会影响到大厅功能。
 
  缺点:
  1. 如果子游戏和大厅之间存在互动,如子游戏打开大厅的某些界面,要事先提供好接口。
  2. 打开子游戏时间较长,如果是游戏引擎制作的游戏,启动引擎可能就需要几秒种时间。
  3. 如果不作预下载,游戏体验可能不佳,游戏中的图片可能要一段时间才能加载出来。
 
  总结:这种方式适合游戏盒子这类推广平台采用,门槛低,游戏大厅互动少。

 2. Cocos2dx + lua

  据了解是目前很多游戏公司使用的方案,个人没有使用过2dx的经验,但是接触过这种框架的项目,这里的优缺点比较可能片面或存在误解,欢迎有经验的同学留言补充,如果是实际项目考量,还请移步Cocos官网查看文档。
 
  优点:
  1. 每个子游戏相对独立,可以实现不重启热更新。
  2. C++和lua的性能还是高于js的。
 
  缺点和U3d中C#+lual类似,这里提点不同的:
  1. Cocos官方目前主推Creator,从文档顺序和质量就可以看出,不排除以后放弃维护的可能。
  2. Creator制作流程更简单快速,也更符合游戏引擎的发展规律,所见即所得。
 
  总结:没有用过2d-x,就不瞎总结了,不过跟着官方走,更容易一些。

 3. Cocos Creator 分包下载

  这是工作中实现的方案,主要解决的是分包下载资源,而不是热更新问题。
  首先Creator会把所有的脚本文件(除插件)编译为一个js文件,这就不容易实现每个子游戏独立热更新脚本。当时已有的热更新方案是,在原生端将新的资源下载到指定目录,将目录添加到Cocos资源搜索路径列表下,再启动Cocos引擎。脚本占用资源很少,但其他资源较大,因此,子游戏的脚本在原生端初始时热更新是可以接受的,资源则分成若干个文件夹,并生成对应版本号,需要时下载到热更新目录下。
 
  优点:对原工程侵入性不大,只需要合理挪动资源。
  缺点:资源管理难度加大。

 4. Cocos Creator AssetBundle

  Cocos修改了打包机制,所有脚本不再编译成一个js文件,而是每个AssetBundle各自拥有一个。这就意味这脚本可以实现热更新(js中一切都是对象,当新的脚本导入运行时,覆盖之前的对象,即实现了更新)。
  而且引入(整理)了资源管理系统,虽然要手动增减引用计数(在这之前需要自己实现),比起之前,使用起来更加可控。
  在测试过程中,发现如果类添加了@ccclass标签,这个类就无法实现更新,这是因为cocos内部会将有这个标签的类注册管理起来,当加载新的同名类时,不会再注册。在不修改源码的情况下,采用的做法是所有脚本都不使用@ccclass标签,这样就不能直接挂载在预制上,但是可以采用addComponent的方式,在代码中动态挂载。
  这样在每次进入子游戏之前下载子游戏的AssetBundle,如果子游戏需要热更新,只需要下载完成之后,重新进入子游戏,就能脚本代码和资源都是最新内容。
  除了子游戏可以做成单个Bundle,游戏内所有相对独立的部分都可以做成Bundle,甚至大厅也可以是一个Bundle,游戏中可以只留一个最小的启动部分,这样几乎可以完全替代原先的热更新方案。
  另外需要注意的。
  同时使用AssetBundle和原热更新方案,需要两次打包。原先热更新方案打包时是不能勾选md5的,因为启动脚本main.js中是写明了需要导入的脚本名的,如果勾选了md5,热更新打出的脚本名和原先main.js中指定的脚本名不符合,无法启动游戏。而AssetBundle的下载及热更新是基于md5+文件名的,所以需要先勾选md5并将远程AssetBundle包保存出来,再取消勾选md5,打包原生工程。如果只是热更新,打一次包就足够了。 新版本cocos creator 中main.js 不会添加md5文件,所以现在原生端可以勾选md5出包。
  可以将本地AssetBundle包更新为远程包。如果将AssetBundle的方式作为热更新的主要方式,那么大厅也要作为一个AssetBundle存在,但是安装包内希望包含大厅的内容,不然用户很快安装完游戏,进去之后发现还要漫长等待下载大厅资源。因此,在出安装包时选择大厅作为本地包,出热更新时作为远程包,我们还需要另外提供本地包版本和远程包版本作比较。
 
  优点:
  1. 无需重启热更新,体验流程。
  缺点:
  1. 资源管理难度加大。
  2. 要求代码模块引用更加小心谨慎。

如何降低资源管理难度?

  资源分包后,用户的体验好了,但是对资源管理这一块的难度也加大了。这个管理分为开发时管理和运行时管理。
  对于运行时管理,随着设备内存的提升,一般规模的游戏很难达到内存崩溃,而资源占用的内存是不易泄漏的,游戏引擎通常会保证一份资源在内存中只有一份拷贝。我们只要关心那些极大的资源,如我们所愿的加载释放即可。我们要小心的是,正在使用的资源被其他地方释放的问题,对于小资源和常用资源,可以不释放。
  而开发时管理是非常难以简化的,这里有两个思路:

  1. 开发时生成资源引用关系。如果是动态引用资源,可能会统计不到,需要额外处理。
  2. 运行是生成资源使用关系。比如进入大厅时,一共加载了那些资源,记录下来,进入一个子游戏后,又加载了哪些资源。这种方式是第三方游戏发行平台,为游戏分包用的,不需要关心代码,直接看运行结果。Unity3D也有类似的功能,之前还是预览功能,不确定现在是否合入正式版本。这种方式缺点也很明显,有些不常用的资源就会记录不到,使用顺序也不一定准确,准确率和游戏运行次数相关。

ps: 欢迎大家指出文中错误和不足,提出意见,以免误导。

Cocos Creator AssetBundle 游戏分包方案评估相关推荐

  1. cocos creator休闲游戏甜品幻想H5+安卓+IOS三端源码开发脚本为javaScript

    cocos creator休闲游戏甜品幻想H5+安卓+IOS三端源码,开发脚本为javaScript方便扩展和阅读,支持cocos creator2.X版本,完整的源码可拿来运营学习研究二次开发. 1 ...

  2. 最齐全的Cocos2D Cocos creator Cocos2Dx游戏源代码素材,速来收藏

    Cocos2D Cocos creator Cocos2Dx游戏源代码类资源应该算是素材类网站中必不可少的资源类型了吧~今天给大家推荐超好用,免费质量高的素材噢,让你坐拥海量资源同时又不撞款! 本人曾 ...

  3. cocos creator小游戏加载跨域头像

    cocos creator小游戏加载跨域头像 // 玩家头像 和 名字 (防止跨域问题) cc.assetManager.downloader.downloadDomImage(avatarUrl , ...

  4. Cocos creator小游戏实现套牛小游戏资源及代码

    Cocos creator实现套牛小游戏资源及代码 一 安装CocosDashBoard 二 新建2D项目RunCow 1.管理项目目录 2.搭建界面 三 上线微信小游戏 1.上线微信小游戏 2.Co ...

  5. Cocos Creator小游戏-2048(PC、安卓、H5)益智类 项目展示+完整项目源码

    游戏录像 Cocos Creator小游戏-2048 游戏玩法 在棋盘上,每次会增加一个小动物,你可以选择四个方向滑动,然后小动物会按方向移动,遇到相同的小动物就会合并,看谁合并的最多. 功能 1.初 ...

  6. cocos creator制作游戏实战-Flak Cannon(二)

    上一文主要介绍了游戏的设计思想和一些cocos creator的基本操作,本文将继续讲述下游戏的具体制作. 本文所涉及的知识点包括,预制体(prefab)的制作,按角度移动物体等 一.制作飞机,战舰, ...

  7. cocos creator + Matchvs游戏开发攻略(1) - 创建游戏

    本人用的游戏引擎为cocos creator 2.x 版本,gameServer语言使用nodejs. 第一步再cocos 官网控制台创建游戏 填写游戏信息添加游戏图标点击创建按钮创建游戏 创建成功后 ...

  8. 今天来介绍怎么获取 3D 素材,进行 Cocos Creator 3D 游戏开发体验!

    前提介绍 刚开始接触 Cocos Creator 3D,还是通过视频教程,认识到了一些常用组件的用法,以及一些简单功能的实现,然后照葫芦画瓢,修修改改,做了两款简单的3D游戏,一款是模拟投篮的,另一款 ...

  9. 利用微信小程序(小游戏)API制作适配cocos creator小游戏排行榜的实例程序

    cocos creator 可以通过新建一个creator项目进行添加子域项目,但是有一个缺点就是占用文件大小是一个问题,所以我这里采用微信的API进行绘制排行榜, 主域就是各种发送给子域的消息,这里 ...

最新文章

  1. 每个优秀程序员必须具备的技能
  2. hive sql 学习笔记
  3. 1. 初探MongoDB —— 介绍、安装和配置
  4. 查看使用的那个USB口和开发板通讯
  5. c#基础(一)之内存管理
  6. 控制小灯闪烁次数_Luat系列官方教程2:控制LED小灯
  7. 质监执法通--移动质监执法系统项目实战
  8. 基于51单片机的8x8x8LED光立方设计
  9. Python人脸识别库的安装
  10. 用Xbox360游戏手柄通过python代码控制树莓派4B点亮LED灯
  11. macbook_我如何学会不再担心并热爱Macbook
  12. 查看GitHub仓库大小的几种方法
  13. 计算机实验进程管理与虚拟机,虚拟机VMware进程控制实验.docx
  14. 解决hbase报错Master exiting
  15. [计算机组成原理]计算机发展历程篇
  16. Android 语音遥控器的整体分析-主机端语音解码的添加
  17. 判断字符串重排后是否相同(区分大小写)
  18. QT MSVC中文编译出错error: C2001: 常量中有换行符
  19. ckplayer对于视频流的处理,页面怎么展示.m3u8的视频流数据
  20. c# 任务调度篇QuartZ(第四部分:配置添加任务文件使用)

热门文章

  1. 6.nand flash
  2. 无线电监测接收机是干什么的?目前都有哪些品牌在售
  3. web前端——h标签
  4. IP地址与子网掩码(扫盲)
  5. 详解eMMC的前世今生和优劣势
  6. python-GUI之Tkinter
  7. 为IMX6 交叉编译Mplayer
  8. Win10+VS2015平台下OpenCV3.1.0的x86和x64平台的Debug与Release模式的编译与配置
  9. 数据的维护(数据库的增删改)
  10. java毕业设计乐儿乐社区生鲜团购系统源码+lw文档+mybatis+系统+mysql数据库+调试