Unity3D开发基础组件提取总结
在游戏开发过程中,除了逻辑功能的开发之外,还有非常多基础的模块。这些模块,对大部分手机网络游戏来说都是一样的。所以,在上个游戏已经上线运营大半年之际,我认为有必要将这些模块整理出来。让后面其它游戏的开发,能够不用从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开发基础组件提取总结的更多相关文章
- 小程序开发-基础组件icon/text/progress入门
小程序的基础组件--基础内容 基础内容分为三大组件: 1. icon--图标 index.wxml <view class="group"> <block wx: ...
- winform快速开发平台 -> 基础组件之分页控件
一个项目控件主要由及部分的常用组件,当然本次介绍的是通用分页控件. 处理思想:我们在处理分页过程中主要是针对数据库操作. 一般情况主要是传递一些开始位置,当前页数,和数据总页数以及相关关联的业务逻辑. ...
- 跟我从零基础学习Unity3D开发--NGUI入门基础
英雄联盟(撸啊撸) QQ飞车 魔兽世界等等相信大家都玩过游戏吧,玩过那UI知道是什么吧?UI可能说得有点专业的话那么游戏中那些属性面板例如: 现在对UI有一定认识了吧!回想一下您玩过的游戏就一定知道什 ...
- [原]Unity3D深入浅出 - 脚本开发基础(Scripts)
常用脚本事件: Update:每帧调用一次 Start:在第一次Update执行前调用 Awake:脚本实例在创建时调用 FixedUpdate:每个固定物理时间间隔调用一次 LateUpdate:每 ...
- Unity3d开发IOS游戏 基础
Unity3d开发IOS游戏 基础 @阿龙 - 649998群 1.先说明两个问题,我在WIN7下面的U3D里面,用了雅黑字体,但是导出为ios后,字体就看不见了,这是为什么呢?这是需要在MAC下找 ...
- .NET基础拾遗(6)ADO.NET与数据库开发基础
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开发基 ...
- IOS开发基础知识碎片-导航
1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...
- JavaEE开发基础
1 JavaEE简介 Java平台有三个版本,分别是JavaSE(Java Platform, Standard Edition),JavaEE(Java Platform, Enterprise E ...
- Android 开发基础及环境配置
2011年买了第一部安卓操作系统的手机,当时势头正盛的HTC不可思议(incredible),当时的想法就是想学习下智能手机开发,但是由于各种原因,客观上是公司的项目太忙了,忙于项目管理.团队建设.客 ...
随机推荐
- PHP网站提交表单如何实现验证码验证功能
很多小伙伴在原生网站时候都会遇到很多意料之外的情况发生,也有不少小伙伴在初学程序代码的时候可能会因为一个小小的逗号隐藏在几百行,几千行的代码中出错常见的在提交表单中很多事需要验证码验证,那么如何来实现 ...
- Codeforces Round #330 (Div. 2) B 容斥原理
B. Pasha and Phone time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- tableView镶嵌加入CollectionView实现方法
创建一个继承UICollectionView的类QHCollectionView在QHCollectionView.h中添加接口方法 @interface QHCollectionView : UIC ...
- 洛谷 P1270 “访问”美术馆
P1270 “访问”美术馆 题目描述 经过数月的精心准备,Peer Brelstet,一个出了名的盗画者,准备开始他的下一个行动.艺术馆的结构,每条走廊要么分叉为两条走廊,要么通向一个展览室.Peer ...
- 【HDOJ5976】Detachment(贪心)
题意:给定n,要求构造若干个各不相同且和为n的正整数使得它们的乘积最大 T<=1e6,1<=n<=1e9 思路:From https://blog.csdn.net/qq_34374 ...
- 自定义JavaScript字典类jsdictionary.js
/* Dictionary类:本类实现了字典功能,所有方法.属性都模仿System..Collection.Generic.Dictionary类 构造函数: Dictionary() 属性: Com ...
- [LeetCode] Sudoku Solver 解数独,递归,回溯
Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by th ...
- android基本控件学习-----Date&Time
Date&Time这里一共讲解下面6个: TextClock(文本时钟),AnalogClock(模拟时钟),Chronometer(计时器),DatePicker(日期选择器),TimePi ...
- GDB 命令详细解释
Linux中包含有一个很有用的调试工具--gdb(GNU Debuger),它可以用来调试C和C++程序,功能不亚于Windows下的许多图形界面的调试工具. 和所有常用的调试工具一样,gdb提供了以 ...
- AC日记——N的倍数 51nod 1103
1103 N的倍数 思路: 先计算出前缀和: 然后都%n: 因为有n个数,所以如果没有sum[i]%n==0的化,一定有两个取模后的sum相等: 输出两个sum中间的数就好: 来,上代码: #incl ...