在游戏开发过程中,除了逻辑功能的开发之外,还有非常多基础的模块。这些模块,对大部分手机网络游戏来说都是一样的。所以,在上个游戏已经上线运营大半年之际,我认为有必要将这些模块整理出来。让后面其它游戏的开发,能够不用从0開始。该游戏client採用Unity3D开发,那么我们这里抽取的基础组件也就是针对Unity3D引擎来的。

简单的梳理之后,我发现主要有下面一些模块,能够独立抽取出来,当然各个模块之间也有一个依赖关系。比方日志模块,差点儿是全部模块都须要依赖的。

1、日志模块

游戏开发中,我们避免不了日志打印,由于有些时候。我们须要输出一些信息或者进行一些调试。

所以。一个方便的日志组件能够事半功倍。当然,你也能够直接使用unity自有的Debug.Log。

可是我们希望抽象出来一套日志接口。为了更方便的控制和扩展。

2、资源读取模块

游戏开发中。我们有非常多的资源。包含lua脚本,游戏配置表,assetbundle等。

在研发的过程中,资源的改变是常事。所以,在研发的过程中,我们直接读取本地的资源。这样假设资源进行改变之后。里面就能够反映在Unity编辑器中。上线或者内部提供的Debug版本号,我们採用资源更新的方式,同一时候,我们会将资源碎文件打包到一个归档文件(MPQ)文件里。然后游戏须要资源的时候,会从MPQ归档文件里读取。

所以,我们的资源读取模块,主要提供一个统一的资源读取接口,调用者不用考虑当前资源是从本地文件还是MPQ归档文件里读取到的。

3、资源更新模块

手机网游在玩家启动游戏之后。会有一个资源更新检查,假设有资源更新,则下载须要更新的资源。这也是如今主流网络游戏的开发模式。主要避免频繁的更换client。资源更新模块逻辑比較单一,就是获取server一个清单文件,然后依据清单文件,下载全部须要下载的资源文件。为了更好的体验。我们支持断点下载。

4、本地资源解压模块

当我们首次发包的时候,我们通常会把全资源打到终于的包中。这样也是为了让用户下载完毕之后,不用再次更新一个非常大的资源。后面紧紧在有须要更新的时候,才採用增量更新的方式进行下载。所以,第一次我们将资源放在终于的包中。我们须要将资源解压到一个可读写的存储文件夹。后面增量更新的时候。我们下载的资源也一样放在这个位置。

5、UI状态管理

网络游戏中。有非常多UI时。我们须要对打开的UI和UI跳转进行管理。

我们能够採用一种相似状态机的方式来管理UI。以及完毕UI界面的切换

6、Socket/Http通信组件。以及协议相关组件

网络游戏,自然少不了和server的通信。如今我们一般採用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開始。 整理完毕之后。我们大概的代码结构例如以下:

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

Unity3D开发基础组件提取总结的更多相关文章

  1. 小程序开发-基础组件icon/text/progress入门

    小程序的基础组件--基础内容 基础内容分为三大组件: 1. icon--图标 index.wxml <view class="group"> <block wx: ...

  2. winform快速开发平台 -> 基础组件之分页控件

    一个项目控件主要由及部分的常用组件,当然本次介绍的是通用分页控件. 处理思想:我们在处理分页过程中主要是针对数据库操作. 一般情况主要是传递一些开始位置,当前页数,和数据总页数以及相关关联的业务逻辑. ...

  3. 跟我从零基础学习Unity3D开发--NGUI入门基础

    英雄联盟(撸啊撸) QQ飞车 魔兽世界等等相信大家都玩过游戏吧,玩过那UI知道是什么吧?UI可能说得有点专业的话那么游戏中那些属性面板例如: 现在对UI有一定认识了吧!回想一下您玩过的游戏就一定知道什 ...

  4. [原]Unity3D深入浅出 - 脚本开发基础(Scripts)

    常用脚本事件: Update:每帧调用一次 Start:在第一次Update执行前调用 Awake:脚本实例在创建时调用 FixedUpdate:每个固定物理时间间隔调用一次 LateUpdate:每 ...

  5. Unity3d开发IOS游戏 基础

    Unity3d开发IOS游戏 基础 @阿龙 -  649998群 1.先说明两个问题,我在WIN7下面的U3D里面,用了雅黑字体,但是导出为ios后,字体就看不见了,这是为什么呢?这是需要在MAC下找 ...

  6. .NET基础拾遗(6)ADO.NET与数据库开发基础

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开发基 ...

  7. IOS开发基础知识碎片-导航

    1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...

  8. JavaEE开发基础

    1 JavaEE简介 Java平台有三个版本,分别是JavaSE(Java Platform, Standard Edition),JavaEE(Java Platform, Enterprise E ...

  9. Android 开发基础及环境配置

    2011年买了第一部安卓操作系统的手机,当时势头正盛的HTC不可思议(incredible),当时的想法就是想学习下智能手机开发,但是由于各种原因,客观上是公司的项目太忙了,忙于项目管理.团队建设.客 ...

随机推荐

  1. c# 操作access数据库image ole字段

    using System; using System.Data; using System.Configuration; using System.Web; using System.Data.Ole ...

  2. java 获取请求的完整url地址

    String url=request.getRequestURL()+"?"+request.getQueryString();

  3. 【转】Unity3D研究院之DontDestroyOnLoad的坑

    http://www.xuanyusong.com/archives/2938 Unity中的一个方法DontDestroyOnLoad可以让某些游戏对象在切换场景的时候不是施放,听起来是一个非常好的 ...

  4. 【转】behave行为树学习使用第一天

    最近在学习使用行为树做AI,决定把学到的贡献出来,抛砖引玉,希望可以认识到更多大牛 -- 首先我们了解下什么是行为树和为什么要使用行为树.   在我们项目中如果需要做一个AI敌人,比如做一个手游 某民 ...

  5. 浏览器不支持JavaScript怎么办

    使用  noscript 标签,给用户提醒即可 <body> <noscript>需要js支持</noscript> </body>

  6. hdu6212[区间dp] 2017青岛ACM-ICPC网络赛

    原题: BZOJ1032 (原题数据有问题) /*hdu6212[区间dp] 2017青岛ACM-ICPC网络赛*/ #include <bits/stdc++.h> using name ...

  7. 删除ARCSDE表空间和用户后,新建时出现error -1:O的解决办法

    对于刚开始使用arcsde的用户,可能会出现各种问题,慢慢来就会找到解决办法 当我们删除用户和表空间时,在服务器本地还保留这sde.dbf文件(删除时选择了删除本地文件,不知道为什么), 我们可以换一 ...

  8. CSA Round #84 The Sprawl

    题目 Analysis 曼哈顿距离($L1$ metric)最小生成树. Implementation 下面的代码参考了 gispzjz 在比赛中的提交. #include <bits/stdc ...

  9. POJ2723 Get Luffy Out 【2-sat】

    题目 Ratish is a young man who always dreams of being a hero. One day his friend Luffy was caught by P ...

  10. sqlmap post注入两种方式

    1. 使用抓包工具抓取数据包,sqlmap加载数据包 POST /SME/static/orderFind/orderIntfaceph HTTP/1.1 Host: abc.com User-Age ...