Unity手机网游框架整理(并集成U8SDK)

作者: 分类: U8SDK, 游戏开发 发布时间: 2016-04-16 11:00 63条评论

在游戏开发过程中,除了逻辑功能的开发之外,还有很多基础的模块。这些模块,对大部分手机网络游戏来说都是一样的。所以,在上个游戏已经上线运营大 半年之际,我觉得有必要将这些模块整理出来,让后面其他游戏的开发,可以不用从0开始。该游戏客户端采用Unity3D开发,那么我们这里抽取的基础组件 也就是针对Unity3D引擎来的。
简单的梳理之后,我发现主要有以下一些模块,可以独立抽取出来,当然各个模块之间也有一个依赖关系。比如日志模块,几乎是所有模块都需要依赖的。
1、日志模块
游戏开发中,我们避免不了日志打印,因为有些时候,我们需要输出一些信息或者进行一些调试。 所以,一个方便的日志组件可以事半功倍。当然,你也可以直接使用unity自有的Debug.Log。但是我们希望抽象出来一套日志接口,为了更方便的控制和扩展。
2、资源读取模块
游 戏开发中,我们有很多的资源,包括lua脚本,游戏配置表,assetbundle等。在研发的过程中,资源的改变是常事,所以,在研发的过程中,我们直 接读取本地的资源,这样如果资源进行改变之后,里面就可以反映在Unity编辑器中。上线或者内部提供的Debug版本,我们采用资源更新的方式,同时, 我们会将资源碎文件打包到一个归档文件(MPQ)文件中。然后游戏需要资源的时候,会从MPQ归档文件中读取。
所以,我们的资源读取模块,主要提供一个统一的资源读取接口,调用者不用考虑当前资源是从本地文件还是MPQ归档文件中读取到的。
3、资源更新模块
手 机网游在玩家启动游戏之后,会有一个资源更新检查,如果有资源更新,则下载需要更新的资源。这也是现在主流网络游戏的开发模式,主要避免频繁的更换客户 端。资源更新模块逻辑比较单一,就是获取服务器一个清单文件,然后根据清单文件,下载所有需要下载的资源文件。为了更好的体验,我们支持断点下载。
4、本地资源解压模块
当 我们首次发包的时候,我们一般会把全资源打到最终的包中,这样也是为了让用户下载完成之后,不用再次更新一个很大的资源。后面紧紧在有需要更新的时候,才 采用增量更新的方式进行下载。所以,第一次我们将资源放在最终的包中,我们需要将资源解压到一个可读写的存储目录。后面增量更新的时候,我们下载的资源也 一样放在这个位置。
5、UI状态管理
网络游戏中,有很多UI时,我们需要对打开的UI和UI跳转进行管理。我们可以采用一种类似状态机的方式来管理UI,以及完成UI界面的切换
6、Socket/Http通信组件,以及协议相关组件
网络游戏,自然少不了和服务器的通信,现在我们一般采用socket长链接的方式,当然,现在手机游戏的开发,也有很多采用Http的方式,也有很多游戏中两种方式都存在。
7、lua集成
现在为了做热更新,一般游戏逻辑,我们采用lua来开发。所以,我们需要集成lua。现在集成lua可以有很多选择,什么ulua,kopielua,slua等。这里都是大同小异,看自己的选择吧。关键可以做一个简单的封装,让lua逻辑的编写采用统一的格式。
8、UI控件事件的封装,方便lua中使用
根据你选择的lua插件,可以对UI中的事件做一些简单的封装。使得事件和回调在lua中可以更方便的处理
9、MPQ资源打包和读取组件
之前,我们说过,为了减少碎文件,我们在发布增量更新的资源的时候,我们首先将所有需要增量更新的资源,打进一个mpq归档文件中。所以,我们需要两个组件。一个是MPQ打包工具,还有一个C#中MPQ文件读取组件。
10、多语言文本文件处理
随着游戏的火热,我们对海外渠道的支持,也是可以预见的发展。所以,我们在开发的时候,就需要想好多语言的支持。这里除了unity本身模型和纹理等的支持,我们还有一类比如游戏中各种tip提示等,也需要做多语言支持。
11、渠道SDK统一API
国内大环境是上线时有N个渠道SDK需要接入。这里我们在Unity中抽象出一套统一的调用接口,屏蔽android和ios等平台的差异,然后提供android平台的支持,和ios平台的支持。至于SDK本身的接入,和渠道包的打包等我们采用U8SDK的方式来做。
12、对象池
手机游戏对于用户体验有着较高的要求,所以我们在游戏开发过程中,需要采用一定的技术来缓存一些常用的组件,让游戏的性能体验更加完善。这里,方案之一就是采用对象池技术。对象池本身的实现和具体的游戏无关,可以独立成一个组件
13、AssetBundle管理
游戏中,之前我们说过,我们是将资源打包成assetbundle,然后通过热更新下来。所以,游戏中我们需要从assetbundle中完成资源的读取和实例化。所以,为了更方便更好地读取资源,我们可以对assetbundle进行统一的管理
14、其他基础组件和相关常用函数的整理
游戏开发中还有很多其他常用的辅助函数等,我们也可以提取出来。 比如unity单例,多线程同步,MD5,IO操作等。

这些就是目前整理出来的一些比较通用的点,也希望通过这个整理,让后面新游戏的开发,有一个稍微基础的起步,不用从0开始。 整理完成之后,我们大概的代码结构如下:
20160320164421280

后面,有时间的话我会将各个组件的实现大概说一下,也当给自己做一个纪录。这套东西,后面随着时间的推移和经验的积累,可能还会加入更多的功能。

本文由@山哥投稿,感谢!
有其他同学愿意投稿的,请联系我QQ:2848004717,被采纳的同学,将获取丰厚的奖励哦

本文出自 U8SDK技术博客,转载时请注明出处及相应链接。

本文永久链接: http://www.uustory.com/?p=2056

评论功能已经关闭,请加入U8SDK技术群进行讨论和咨询:207609068
Ɣ回顶部
U8SDK技术群 x
技术同学请加入
点击加入