unity游戏框架学习-框架结构

  转眼毕业三年了,算上实习差很少四年的游戏开发了,一直想本身鼓捣套框架,奈何能力太次,不知道从哪开始。可是万事开头难,总要踏出第一步,才会有后面的两步,三步…html

  我认为的unity游戏框架就是一整套的工具和规范,框架部分提供项目中使用的基础设施,包括资源管理、网络通讯、UI框架、消息管理、场景管理、数据解析及存取等,同时定义了一系列规范包括编码的,例如参数命名、缩进,以及行为准则,例如加载场景必须用框架的xxx接口,贴图必须放在xxx文件夹下等。android

  这篇是第一篇,先简单介绍下框架所包含的内容吧。ios

  1、首先,咱们框架是由多个不一样的模块组成的,因此,咱们须要一个模块的管理类ModuleManager,该类负责各个模块的初始化、维护模块实例的引用窗口,以及update函数负责模块的更新程序员

public void Update()
{
	if(!m_bIsInit)
	{
		return;
	}
	// 初始化完就能够走C#层的模块update
	for (int i = 0; i < m_Modules.Count; ++i)
	{
		m_Modules[i].Update(Time.deltaTime);
	}
}

  2、咱们打开游戏之后,用户须要更新、登陆之后才能体验游戏的内容。json

  登陆模块:http://www.javashuo.com/article/p-dergpfsi-s.htmlc#

  因此咱们要有一个登陆模块LoginModule,该模块负责从进入游戏main场景前的加载和登陆过程xcode

  LoginModule须要完成按照顺序以下:缓存

  1.创建网络链接,若是没有网络弹出提示框,不然跳转到步骤2性能优化

  2.扩展包更新。android端须要先检查扩展包是否须要更新,若是要更新,检查内存是否足够,内存不足弹出提示框,不然跳转步骤3服务器

  3.解压扩展包。若是要解压,检查内存是否足够,内存不足弹出提示框,不然跳转4

  4.热更。

    (1)获取服务端版本号文件,若是须要强更,跳转到应用商店,若是须要更新,跳转下一步,不然跳转步骤5

    (2)获取服务端md5文件,对比本地md5,获取须要更新的ab包列表

    (3)下载并解压须要更新的ab包,这边须要检查内存是否足够,内存不足弹出提示框

  5.更新结束。登陆sdk如腾讯帐号,获取帐号状态,如封号,弹出提示,不然跳转步骤6

  6.登陆游戏服务器(简称游服),获取游戏状态,如在维护状态,弹出提示,不然跳转步骤7

  7.新手引导(顺序跟步骤8能够对换。看状况)

  8.预加载资源(可无,看状况),预加载结束跳转步骤9

  9.请求服务端初始化数据(如main场景要显示内容须要的数据、小红点等),初始数据都接收完毕跳转步骤10

  10.切换到mian场景,打开主界面

3、sdk模。游戏更新完毕后,咱们开始登陆游戏了。SDKModule模块负责的内容包括:

  sdk模块:http://www.javashuo.com/article/p-sosmwerk-r.html

  1.帐号类:建立、登陆、切换

  2.充值

  3.外部分享

  4.打开外部连接,如论坛、社区等

4、sdk登陆完毕,经过sdk返回的用户信息前面链接咱们的游服,这就须要一个专门的模块Socket负责和游服的通讯,包括网络的链接、消息的接收、心跳包的发送、断线重连的监听和处理

  http://www.javashuo.com/article/p-xmakzplx-e.html

5、用户登陆结束了,咱们能够进入主城了,这时候就须要用到场景模块SceneModule切换场景了,SceneModule主要完成如下工做

  http://www.javashuo.com/article/p-nsinwqpv-e.html

  1.场景的加载、卸载、切换

  2.加载新的场景时须要卸载旧场景的的资源,清除GC

  3.支持场景资源的预加载

6、前面说到的预加载资源,用什么来加载呢,咱们须要一个资源管理器LoadModule,这是最主要的一个模块,咱们来看看该模块的功能

  资源管理:http://www.javashuo.com/article/p-ajtqfwig-s.html

  资源加载:http://www.javashuo.com/article/p-nodnonev-g.html

  AssetBundle:http://www.javashuo.com/article/p-kxvvqcjh-e.html

  1.加载资源,包括从本地加载、从ab包加载、从网络下载,而ab包的加载是其中最麻烦的地方了(ab包依赖、冗余)

  2.ab包的加载,包括mainfest的加载和依赖的加载

  3.资源、ab包的缓存和卸载:引入引用计数和销毁计时(没有资源引用且很是驻资源且销毁计时结束接能够回收了)

  4.不一样资源类型的加载。如图片、音频、预制体、场景、配置表等

7、终于进入内城了,是时候打开ui界面了,UIModule用于管理咱们的ui界面,该模块须要实现如下功能:

  ui框架:http://www.javashuo.com/article/p-mmolsyet-r.html

  1.界面的加载、卸载

  2.打开、关闭、隐藏、显示界面,这边隐藏是指界面被遮挡的意思,通常来讲,界面被遮住时,应该关闭界面的更新

  3.界面栈的管理,主要是用于场景切换时须要回到上一个场景打开的界面栈

  4.界面的基类:弹窗、全屏窗口

  5.须要的功能:图片镜像(节省资源)、滑动列表(复用)、模糊背景等

8、前面说到的资源须要复用,UI须要复用,那就须要一个通用的对象池用来管理咱们的对象啦

9、咱们都知道MVC框架,核心是分隔view和module层,在咱们的框架就是view和view之间,View和module之间不直接引用对象,那要怎么通讯的,这时候就须要一个消息机制

  消息系统:http://www.javashuo.com/article/p-xfmkvzdo-e.html

  1.添加、移除事件的方法

  2.须要触发事件的方法

  3.Lua端的消息机制

  4.c#端的消息机制

10、程序员嘛,就是来写bug的。有bug不可怕,没日志就难受了,一个好的日志系统能够帮助咱们更快速的定位到bug的位置

  日志系统:http://www.javashuo.com/article/p-mkkbpmhn-v.html

  1.日志开关。只有开发版本开启,由于日志仍是比较耗性能的。。。

  2.堆栈日志界面:ERROR时弹出界面,该界面显示错误的堆栈日志。方便qa测试时查看日志

  3.FPS帧率的显示

  4.游戏正式上线之后,咱们很难拿到用户的错误日志,这时候咱们须要把错误的日志上传到咱们的服务器

  5.当游戏崩溃时咱们是拿不到unity打印的日志的,这时候就须要接入FireBase了,它能够帮咱们把崩溃的详细日志上传到网页上,方便咱们查看

11、音乐模块,用于管理音乐(bgm、音效)的播放、暂停,由于音乐文件有打ab包,因此需统一的接口去管理

12、用户设置,例如王者荣耀里,当你选择一个英雄并进入游戏后,下一次选择英雄他会记住你上一次的出装、天赋、皮肤等内容,还有就是玩家能够打开、关闭游戏音效

  用户设置系统:http://www.javashuo.com/article/p-wiqggurn-r.html

  1.本地设置,设置存储在本地,更换设备就失效了,通常存成\json\xml或unity的PlayerPrefs

  2.保存服务端,设置上传到服务器,这样更换设备也不影响设置

十3、终于,终于咱们游戏作好了,要打包了~,命令行一键打包了解下  哈哈哈

  一键打包:http://www.javashuo.com/article/p-emjxuywz-d.html

  1.命令行参数解析,命令的参数包括平台、是否打ab包、是否从新导出、版本号、版本类型(develop\release)等等你想配置的参数

  2.设置图集名字,防止项目成员不按规则设置图集

  3.设置ab包名字、打ab包、压缩ab包(热更包过大用户容易流失)

  4.生成md5,对比旧的md5,上传须要更新的ab包和新的md5文件到服务器

  5.导出unity工程

  6.打包。ios使用xcode打ipa,android使用android studio打apk

  7.发布版本,测试包发布到叮叮群,正式包由运营上传到应用商店(运营很棒)

十4、编辑器工具,工欲善其事,必先利其器,因此工具必不可少

  1.图集检查工具、图集名字设置工具

  2.ab包名字、依赖检查工具

  3.资源导入检查设置

  4.配置、服务器协议同步工具

十5、性能优化

  1.CPU

  2.GPU

  3.ui优化,包括dc和界面打开速度

  4.uwa接入

 

 

 

好了,大概就这些吧,这篇是概述,后续会针对每一个模块进行详细的说明,也但愿读者能够帮我指出不足