开源地址:https://github.com/Golangltd/LollipopUnity

文档地址:GameAIs.Com

设计 如下:

  1. 与后端LollipopGo v3.0.1  完美结合

  2. 帧同步

  3. 通信方式KCP

  4. 数据方式protobuf

  5. 帧预判、回滚等

  6. 更新时间:2021年1月1日,同时后端3.0.1版本一并更新

  7. 前端:C# 和 lua ; 后端:Go 和 C++

转载一篇框架文章

一、首先,我们框架是由多个不同的模块组成的,所以,我们需要一个模块的管理类ModuleManager,该类负责各个模块的初始化、维护模块实例的引用窗口,以及update函数负责模块的更新

  1. public void Update()

  2. {

  3.     if(!m_bIsInit)

  4.     {

  5.         return;

  6.     }

  7.     // 初始化完就可以走C#层的模块update

  8.     for (int i = 0; i < m_Modules.Count; ++i)

  9.     {

  10.         m_Modules[i].Update(Time.deltaTime);

  11.     }

  12. }

复制代码

 二、我们打开游戏以后,用户需要更新、登录以后才能体验游戏的内容。

  登录模块:https://www.cnblogs.com/wang-jin-fu/p/10979719.html

所以我们要有一个登录模块LoginModule,该模块负责从进入游戏main场景前的加载和登录过程

  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场景,打开主界面

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

  sdk模块:https://www.cnblogs.com/wang-jin-fu/p/11017653.html

  1.账号类:创建、登录、切换

  2.充值

  3.外部分享

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

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

  https://www.cnblogs.com/wang-jin-fu/p/11121654.html

五、用户登录结束了,我们可以进入主城了,这时候就需要用到场景模块SceneModule切换场景了,SceneModule主要完成以下工作

  https://www.cnblogs.com/wang-jin-fu/p/11128974.html

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

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

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

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

  资源管理:https://www.cnblogs.com/wang-jin-fu/p/11189323.html

  资源加载:https://www.cnblogs.com/wang-jin-fu/p/11218659.html

  AssetBundle:https://www.cnblogs.com/wang-jin-fu/p/11171626.html

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

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

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

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

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

  ui框架:https://www.cnblogs.com/wang-jin-fu/p/11252256.html

  1.界面的加载、卸载

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

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

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

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

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

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

  消息系统:https://www.cnblogs.com/wang-jin-fu/p/11255831.html

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

  2.需要触发事件的方法

  3.Lua端的消息机制

  4.c#端的消息机制

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

  日志系统:https://www.cnblogs.com/wang-jin-fu/p/11263310.html

  1.日志开关。只有开发版本开启,因为日志还是比较耗性能的。。。

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

  3.FPS帧率的显示

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

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

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

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

  用户设置系统:https://www.cnblogs.com/wang-jin-fu/p/11256071.html

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

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

十三、终于,终于我们游戏做好了,要打包了~,命令行一键打包了解下  哈哈哈

  一键打包:https://www.cnblogs.com/wang-jin-fu/p/11242450.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.发布版本,测试包发布到叮叮群,正式包由运营上传到应用商店(运营很棒)

十四、编辑器工具,工欲善其事,必先利其器,所以工具必不可少

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

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

  3.资源导入检查设置

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

十五、性能优化

  1.CPU

  2.GPU

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

  4.uwa接入

 二、我们打开游戏以后,用户需要更新、登录以后才能体验游戏的内容。

  登录模块:https://www.cnblogs.com/wang-jin-fu/p/10979719.html

所以我们要有一个登录模块LoginModule,该模块负责从进入游戏main场景前的加载和登录过程

  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场景,打开主界面

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

  sdk模块:https://www.cnblogs.com/wang-jin-fu/p/11017653.html

  1.账号类:创建、登录、切换

  2.充值

  3.外部分享

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

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

  https://www.cnblogs.com/wang-jin-fu/p/11121654.html

五、用户登录结束了,我们可以进入主城了,这时候就需要用到场景模块SceneModule切换场景了,SceneModule主要完成以下工作

  https://www.cnblogs.com/wang-jin-fu/p/11128974.html

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

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

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

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

  资源管理:https://www.cnblogs.com/wang-jin-fu/p/11189323.html

  资源加载:https://www.cnblogs.com/wang-jin-fu/p/11218659.html

  AssetBundle:https://www.cnblogs.com/wang-jin-fu/p/11171626.html

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

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

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

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

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

  ui框架:https://www.cnblogs.com/wang-jin-fu/p/11252256.html

  1.界面的加载、卸载

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

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

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

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

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

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

  消息系统:https://www.cnblogs.com/wang-jin-fu/p/11255831.html

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

  2.需要触发事件的方法

  3.Lua端的消息机制

  4.c#端的消息机制

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

  日志系统:https://www.cnblogs.com/wang-jin-fu/p/11263310.html

  1.日志开关。只有开发版本开启,因为日志还是比较耗性能的。。。

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

  3.FPS帧率的显示

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

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

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

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

  用户设置系统:https://www.cnblogs.com/wang-jin-fu/p/11256071.html

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

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

十三、终于,终于我们游戏做好了,要打包了~,命令行一键打包了解下  哈哈哈

  一键打包:https://www.cnblogs.com/wang-jin-fu/p/11242450.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.发布版本,测试包发布到叮叮群,正式包由运营上传到应用商店(运营很棒)

十四、编辑器工具,工欲善其事,必先利其器,所以工具必不可少

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

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

  3.资源导入检查设置

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

十五、性能优化

  1.CPU

  2.GPU

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

  4.uwa接入

版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。

  1. Golang语言社区

    ID:Golangweb

    www.GameAIs.Com

    www.ByteEdu.Com

    www.ByteEdu.Org

    游戏服务器架构丨分布式技术丨大数据丨游戏算法学习

社区周末版--Unity3D 游戏框架LollipopUnity v1.0.1相关推荐

  1. 杀人游戏分组工具 V1.0 by:wy811007(原创)发布

    程序:杀人游戏分组工具 V1.0 语言:VS2010 C# (.NET Framework v2.0) 作者:wy811007 Blog:http://wy811007.blog.163.com MD ...

  2. android 1.0框架,KOOM V1.0.5 框架解析

    快手在2020年中旬开源了一个线上OOM监控上报的框架:KOOM,这里简单研究下. 一.官方项目介绍 1.1 描述: KOOM是快手性能优化团队在处理移动端OOM问题的过程中沉淀出的一套完整解决方案. ...

  3. C#winform 经典小游戏贪吃蛇V1.0(一)

    关于V1.0   为什么我给这个版本定义为V1.0嘞,因为在这个版本中仅仅实现了蛇的自动行进,按键对蛇的行进方向的操作和吃掉食物蛇身的增长等操作. 但是任何事情都必须一步一步来,当我们完成这个乞丐版的 ...

  4. [Android]Android端ORM框架——RapidORM(v1.0)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4748077.html  Android上主流的ORM框架有很多 ...

  5. unity3d模型制作规范v1.0 .

    数字模型制作规范 本文提到的所有数字模型制作,全部是用3D MAX建立模型,即使是不同的驱动引擎,对模型的要求基本是相同的.当一个VR模型制作完成时,它所包含的基本内容包括场景尺寸.单位,模型归类塌陷 ...

  6. unity3d模型制作规范v1.0

    数字模型制作规范 本文提到的所有数字模型制作,全部是用3D MAX建立模型,即使是不同的驱动引擎,对模型的要求基本是相同的.当一个VR模型制作完成时,它所包含的基本内容包括场景尺寸.单位,模型归类塌陷 ...

  7. 中小学在线学习云平台最新社区版 自适应手机端 ASP v1.0

    介绍: 该系统属于在线网校整站系统.html5响应式,企业商学院.职业考证.中小学.党校.政府企业都可以使用,可以适合各行业的学习平台.响应式自适应各种移应用终端,同一个后台,数据即时同步,方便操作. ...

  8. 安卓游戏优化加速器v1.0.5

    软件介绍 GameBooster是一款游戏优化加速器,极大程度优化游戏的画面清晰度.游戏帧数等等优化条件,充分调用手机资源,极大程度的提升游戏视觉体验和操作体验,提升游戏速度告别卡顿,快速上分.www ...

  9. unity塔防游戏怪物转向_野生防御塔游戏下载-野生防御塔游戏安卓版 v1.0

    野生防御塔是一款塔防策略类型的游戏,经典好玩的塔防策略玩法等你来,在这开启一场刺激的塔防吧.你需要依靠塔防建筑抵挡怪物的攻击,同时也需要面对对手的偷袭.依靠击杀怪物获得的金币可以购买一些道具升级你的塔 ...

最新文章

  1. ios开发中的C语言学习—— 结构体简介
  2. android phpmyadmin,从android studio向phpmyadmin添加数据时出现问题
  3. 信息学奥赛一本通(1317:【例5.2】组合的输出)
  4. 动态html树形菜单模板,JS+CSS简易树状菜单Tree
  5. GDI+简单现实文字旋转
  6. 在C#中,List struct中的值是否装箱?
  7. scala闭包 变量_Scala闭包,自由和绑定变量,匿名函数
  8. 【Python剧情版游戏】优美精致的画风甜甜的剧情、很难不让人上头啊?你get到了嘛
  9. html彻底隐藏源代码禁止抓包,如何彻底禁止查看网页源代码
  10. ie8打完补丁重启报错
  11. PROC SURVEYSELECT
  12. js常用工具类(1)
  13. R语言循环函数编写三境界
  14. OpenBmc开发1:openbmc简介
  15. Conflux 网络已获 Cobo 钱包支持
  16. 学习笔记(01):大数据金融信贷项目实战(Spark2.3.x Streaming)-Spark SQL架构原理
  17. python+uiautomation,怎么学习,雪地跪求大佬赐教
  18. ubuntu摄像头软件--茄子大头贴
  19. 简单的点对点聊天软件
  20. 移动工资高?华为员工笑了(转)

热门文章

  1. JavaScript在控制台打印正方形、三角形
  2. aws 数据库迁移_将您的sql数据库迁移到云AWS和Azure
  3. cube-ui的搭建
  4. 仙境传说服务器修改,《仙境传说》服务器合并公告
  5. python中分支结构包括哪些_python分支结构
  6. 扒掉Smarty的裤衩儿
  7. 电商中抢购与秒杀—大规模并发
  8. 洛谷P3243 [HNOI2015]菜肴制作——拓扑排序
  9. 【Spring6】| GoF之代理模式(JDK动态代理和CGLIB动态代理)
  10. 苹果cms第三方登录QQ互联正确回调设置方法