浅谈游戏热更新
概述:
似乎涉及到游戏开发,项目初始立项一直到项目收尾,开发人员都会听到“热更新”这几个字眼,当然有些游戏不需要热更新的就没必要热更新。或者作为初级程序员的时候面对面试的时候,当被问及到“你们公司的产品是否支持热更新”,如果能够事先对这一块有所了解或者有所准备的话,还是很不错的。
既然我们要了解热更新,那么首先就要知道为什么要进行热更新?以及热更新的途径和方式等等,只有这样你才能对这个热更新的概念有个整体的了解!
首先我们先来了解一下,为什么要进行热更新呢?
对于游戏热更新的需求,主要分为两个部分,第一,客户端,第二,服务器端
客户端方面:
目前市场热门手游类型大概就是MMORGP这种类型了,产品出包少说得有个100MB吧?如果你每次修改个别bug就要暂停服务器,进行维护,然后出大包,让游戏用户再去更新下载,其实内部只是做了一些很少的修改,这样一来用户的体验感就会下降,久而久之,这个游戏的玩家受众量就会越来越低。所以呢,为了让产品适应上线运营的需求,我们必须在开发的时候就做好热更新的准备。同时如果发布版本平台审核比较严(例如:苹果appstore)审核过程一般10-20天,这样对于开发来说是极其不好的。
另外由于现在大部分unity手游公司基本使用的脚本语言是C#,所以这就决定了热更新的局限性,虽然使用Assembly反射可以实现在安卓机子上面的热更新,但是ios上面是不支持,所以对于要发布双平台的手游产品来说,使用ulua可以让开发变得更易快捷,也容易维护,因为lua不需要编译,直接可以在机子上面看出效果。有人会问,为什么C#脚本不能直接热更新呢?首先刚开始学习C#的同学应该都知道C#脚本写好之后,需要让编译器编译出dll可执行文件,然而这个编译的过程只能在pc平台上面完成,在移动平台上面是不行的,所以正如我前面所说,每当我们对游戏进行逻辑,ui修改啊,代码结构发生改变时候,我们就需要重新编译,再次打包,重更版本,如果你是玩家,为了一点小小的bug修改,并没有多少实质性游戏功能方面的修改,你觉得玩家会忍受这种动不动就浪费流量浪费时间的事情吗?
所以:对于游戏热更新,这是一个游戏程序员必备的技能,当然这需要你有一定的lua基础,还没有这个语言基础的同学可以去学习下。
接着说服务端:
刚出的产品,在众多怀着热情的玩家疯狂的点击下载以及登陆畅玩之时,出现了bug肯定是在所难免的,如果你的游戏不支持热更新技术,那么关服是迟早的事情,这是针对热门MMMORPG来说。为了不影响玩家体验,又能保证服务器稳定运行的情况下,修复一些轻微bug,使用热更新之最好不过的了。
接下来说说热更新的途径:
热更新的方式:
一共有以下几种方式:
1.使用基于lua的ulua技术,让游戏部分ui或者部分逻辑模块使用lua脚本编写,这样可维护性强,易于扩展。(准则:动态特性适合用来做游戏UI)
2.使用C#Assembly 的反射技术( class.GetType.Assembly & calss.GetType),正如前面所说,安卓适合,苹果不适合,这样就满足不了发布双版本的需求。
3.最后一种就是C#中的light技术。
重点说说lua的热更新技术:
为什么手游公司会使用ulua,或者是其他相关的lua热更新技术呢,首先这是由于lua脚本轻巧,同时跨平台解析,无需编译工程,下载下来在手机端上面可以直接运行,所以lua脚本本身的优势之处这就造就了使用lua热更新是必然的。
(未完待续。。。