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

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

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

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

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

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

  登录模块: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/10975660.html

unity游戏框架学习-框架结构相关推荐

  1. Unity游戏框架学习笔记——03基于观察者模式的事件中心

    Unity游戏框架学习笔记--03基于观察者模式的事件中心 基于观察者模式的事件中心 一如既往指路牌:https://www.bilibili.com/video/BV1C441117wU?p=5. ...

  2. Unity 游戏框架搭建 (七) 减少加班利器-QApp类

    本来这周想介绍一些框架中自认为比较好用的小工具的,但是发现很多小工具都依赖一个类----App. App类的职责: 1.接收Unity的生命周期事件. 2.做为游戏的入口. 3.一些框架级别的组件初始 ...

  3. Unity 游戏框架搭建 (九) 减少加班利器-QConsole

    为毛要实现这个工具? 在我小时候,每当游戏在真机运行时,我们看到的日志是这样的. 没高亮啊,还有乱七八糟的堆栈信息,好干扰日志查看,好影响心情. 还有就是必须始终连着usb线啊,我想要想躺着测试... ...

  4. Unity 游戏框架搭建 2018 (四) 我所理解的框架

    前言 架构和框架这些概念听起来很遥远,让很多初学者不明觉厉.会产生"等自己技术牛逼了再去做架构或者搭建框架"这样的想法.在这里笔者可以很肯定地告诉大家,初学者是完全可以去做这些事情 ...

  5. Unity 游戏框架搭建 (二十一) 使用对象池时的一些细节

    上篇文章使用SafeObjectPool实现了一个简单的Msg类.代码如下: class Msg : IPoolAble,IPoolType{#region IPoolAble 实现public vo ...

  6. Unity 游戏框架搭建 (五) 简易消息机制

    什么是消息机制? 23333333,让我先笑一会. 为什么用消息机制? 三个字,解!!!!耦!!!!合!!!!. 我的框架中的消息机制用例: 1.接收者 using UnityEngine;names ...

  7. Unity 游戏框架搭建 2018 (一) 架构、框架与 QFramework 简介

    约定 还记得上版本的第二十四篇的约定嘛?现在出来履行啦~ 为什么要重制? 之前写的专栏都是按照心情写的,在最初的时候笔者什么都不懂,而且文章的发布是按照很随性的一个顺序.结果就是说,大家都看完了,都还 ...

  8. Unity 游戏框架搭建 2019 (四十二) MonoBehaviour 简化

    在前两篇,我们完成了第九个示例.为了完善第九个示例,我们复习了类的继承,又学习了泛型和 params 关键字. 我们已经接触了类的继承了.接触继承之前,把类仅仅当做是方法的集合,接触了继承之后,我们的 ...

  9. 【Unity 框架】QFramework v1.0 使用指南 介绍篇:01. 简介 | Unity 游戏框架 | Unity 游戏开发 | Unity 独立游戏

    01. 简介 大家好,我是 QFramework 的作者 凉鞋,QFramework 从第一次代码提交到现在快 7 年了(2015 年 12 月 ~ 2022 年 10 月)了,而经过了 7 年时间的 ...

最新文章

  1. 安装mysql8.0.11版本,并使用mybatis进行连接mysql遇到的问题
  2. DCMTK:OFStack类的测试程序
  3. 【CodeForces - 864C】Bus (模拟,有坑)
  4. Linux下查看/管理当前登录用户及用户操作历史记录
  5. 对于AES和RSA算法的结合使用以及MD5加盐注册登录时的密码加密
  6. C++静态库与动态库(转)
  7. 拿来就能用!几步搭建一套简单直播系统 | 原力计划
  8. python编程入门 适合于零基础朋友-Python不能帮你找到女朋友,却能让你成为有钱的单身狗。...
  9. python函数作用的描述_python基础之函数内容介绍
  10. RTC 技术的试金石:火山引擎视频会议场景技术实践
  11. 苹果cms模板 短视8.1旗舰版
  12. QT界面窗口的显示和隐藏,关闭
  13. 手机app注册登录服务器客户端流程图
  14. python excel截图保存_如何用Python读取Excel中图片?又如何用Python往Excel中写入图片?...
  15. org.tigris.subversion.javahl.ClientException: Attempted to lock an already-locke
  16. Android彻底解决Youtube和Google play store等套件报错崩溃的问题
  17. linux判断季末日期,C#根据当前时间确定日期范围(本周、本月、本季度、本年度)...
  18. CAD2017打开图纸点字体替换时没有字体选择框的问题
  19. java时间管理_IT 人,如何构建自己的时间管理系统?
  20. 记事本TXT中文默认保存的ANSI格式文件乱码,一些软件菜单乱码,右键菜单某些乱码...

热门文章

  1. 第01章 初识Mysql
  2. 2017-2018-1 《信息安全系统设计基础》实验三报告
  3. Android点赞音效播放
  4. linux配置ip 网关 和dns(转)
  5. 手机能上网,电脑联不上网
  6. Maven内置变量说明
  7. 开发nagios插件监控/etc/passwd中文件变化
  8. H3 BPM微信接入配置
  9. 每天一个linux命令(41):ps命令
  10. 【原创】leetCodeOj ---Convert Sorted List to Binary Search Tree 解题报告