youyou_ExcelFlatbufTool
基于Flatbuffers
原始表格为xls,xlsx格式 支持公式等表格功能
可以生成客户端c#代码、lua代码、服务器端代码
表格存储采用flatbuffers二进制格式存储并压缩
客户端在预加载流程中进行表格数据反序列化
客户端的lua表格数据直接生成在lua代码中
支持数组字段定义 |
|
支持系统表生成,如Sys_Code(系统码),Sys_Effect(特效)
目的:避免在项目中编码硬代码,方便查找 |
|
|
|
youyou_ProtobufTool
基于Protobuf3
根据协议定义生成客户端 ProtoIdDefine(消息编号定义)
生成客户端c#版 协议监听
生成客户端Lua版 ProtoIdDefine(消息编号定义)
生成客户端Lua版 协议监听
生成服务器端协议编号
|
|
|
YouYou编辑器
框架介绍
宏定义
等级参数管理
资源包设置
对象池分析 |
|
|
|
宏设置
常用的编辑器开关 都在这里管理,能够方便进行全局设置
|
|
|
|
参数设置
项目启动会有个设备等级参数(高 中 低 配机)
各个管理器的参数可在这里根据不同等级配置成不同参数值
如Http失败重试次数,不同等级设备可以配置不同 |
|
|
|
资源包设置和打包
资源包版本号手动管理
资源包按文件夹划分大类,并可以设置把文件夹打成一个整体资源包,还是文件夹内容打散打包
如表格 Lua脚本 图集等可以打成一个包,角色、场景、特效等可以打散打包
文件夹可以设置是否初始资源,是否加密 |
|
打包时候自动生成依赖文件,按文件生成依赖关系,比如一个预设依赖材质 贴图,一个二进制格式,游戏启动后加载,一个Json文件,方便开发阶段查看依赖关系
自动生成资源包版本文件,一个二进制格式,一个Json文件
打包后自动生成到【对应版本号/平台】文件夹内 |
|
|
|
对象池分析
包含类对象池
AssetBundlePool
AssetPool
方便查看各个池中的资源,每个资源的计数和剩余释放时间 |
|
|
|
游戏入口
客户端框架只有一个继承自MonoBehaviour的类 游戏入口
可设置当前设备等级(非编辑器模式根据设备信息识别)
初始化全局等级参数,各个管理器通过key获取等级参数值
需要拖拽到监视面板的组件,都在这里设置,如游戏物体实例池分组设置,UI实例分组设置等 |
|
|
|
全局参数
根据KEY和设备等级,可获取等级参数
如下载管理器 可以在初始化时候 获取配置好的下载器数量
下载器数量: DownloadRoutineCount = GameEntry.ParamsSettings.GetGradeParamData(ConstDefine.Download_RoutineCount, GameEntry.CurrDeviceGrade);
重试次数:Retry = GameEntry.ParamsSettings.GetGradeParamData(ConstDefine.Download_Retry, GameEntry.CurrDeviceGrade); |
|
|
事件管理
SocketEvent(派发Socket消息包)
CommonEvent
派发系统事件
派发通用事件
事件编号通过表格控制 同时生成c#和 Lua事件编号代码
对于没有参数的事件 直接派发
对于单参数的事件,使用类对象池获取如VarInt类对象传参 避免实例化对象 避免拆箱装箱
对于多参数的事件,可以使用BaseParams或自定义类型传递 |
|
|
|
流程管理
流程管理器通过状态机管理创建流程状态机
包含:
启动流程
检查更新流程
预加载流程
登录流程
… |
|
|
表格管理
C#中在预加载流程,通过flatbuffers进行每个表格的反序列化,反序列化采用异步方式进行,所需表格并行加载,提升加载速度
在预加载流程中通过加载完毕的表格数量判断出表格是否全部加载完毕,然后执行后续流程
单一表格加载完毕和所有表格加载完毕都会派发系统事件 |
|
|
Http管理
通过Http管理器发送Web请求,管理器从类对象池获取Http访问器进行Web请求
Http管理器在初始化时获取 【失败重试次数】【失败重试间隔(秒)】
参数回调在进行Web请求时候直接传入 |
|
|
|
Socket通讯管理
创建Socket访问器
可以把小包合并大包发送 较少网卡通讯
消息包可配置压缩
消息包默认使用异或加密 |
|
|
下载管理
下载管理器在初始化时获取【下载重试次数】【重试间隔(秒)】【下载器数量】
可以进行单文件下载和多文件下载(检查版本更新使用的就是多文件下载)
下载中和下载完毕回调用过下载方法直接传入 |
|
|
|
对象池管理
类对象池
AssetBundlePool
AssetPool
GameObjectPool
UIPool |
|
|
可寻址资源管理
在预加载流程中读取分类资源信息和资源包信息
检查版本更新时只检查初始资源,和本地资源信息对比进行下载
可寻址资源管理可以进行边玩边下载,所以游戏发行时候不需要发布完整包
加载某个资源时候会先加载这个资源的依赖资源,然后加载自己
加载资源时候先检查只读区对比资源包版本号,如果只读区不存在从可写区读取
当加载资源时候如果资源在只读区和可写区都不存在则从CDN下载,下载完毕后加载 |
|
|
场景管理
场景可以进行分级切割(低配机可以只加载必须加载的场景)
场景数据在场景表和场景明细表中进行配置
场景加载使用异步累加加载 |
|
|
定时器
定时器管理器用来注册和移除定时器
定时器可以进行延迟启动、暂停、恢复
定时器回调【启动】【更新】【结束】直接在初始化时传入 |
|
|
|
UI框架
UI框架支持普通UI、反切UI(把UI存放在栈,只显示栈顶UI)
UI预设在Sys_UIForm配置,单个UI可配置单实例、多实例,可配置【UI分组】、【是否锁定】、【禁用层级管理】、【多语言】
UI默认有4个回调:【OnInit】【OnOpen】【OnClose】【OnBeforDestroy】
UI实例池可配置【最大数量】【释放间隔】【UI实例生命期】
UI回池后不是设置为禁用,而是把UI设置到不可见层级,防止SetActive卡顿 |
|
|
Lua框架
预加载流程中启动Lua框架
通过Lua管理器初始化表格,初始化PB协议,监听通讯回调
针对Lua版本的UI,可添加UI组件分组,使用分组可以对UI上不同模块组件分类,方便管理
在分组内添加UI元素并指定类型 |
|
|
|
Lua读取表格数据
表格数据可根据配置文件配置成直接从Lua实体文件读取
如果是Lua中偶尔用,c#中常用,并且数据量很大的表,Lua可以配置成直接读取C#数据,避免表格数据重复加载,但是这种方式会增加Lua和C#通讯,根据情况灵活使用 |
|
|
|
Lua通讯协议
Lua框架启动时候定义全局PB管理器进行加载协议文件,序列化反序列化协议数据
初始化协议时候,会初始化客户端相关的PB协议文件
协议文件以.bytes格式存储,和xlua代码放在同一个文件夹内,打成一个资源包 |
|
|
|
Lua和CSharp共享内存数据
为了减少Lua和CSharp交互,而又能满足Lua和CSharp共享内存数据,直接将数据存储到Lua分配的数组内
将Lua底层的内存结构直接暴露给C#
C#绕过LuaAPI直接以unsafe的方式直接读写Lua的内存
获得近乎原生的读写性能同时又节省内存 |
|
共享内存编辑器
通过共享内存数据编辑器,可扩展不同模块的共享内存数据,设置数据的字段类型、字段名称、描述信息
可生成对应的Lua和C#脚本,Lua中会自动生成GetSet方法,C#中会生成对应属性访问Lua内存 |
|
|
|
多语言
在Sys_Localization表格中配置多语言数据
表格工具生成数据时候自动切割表格生成不同语言二进制数据文件
为减少继承自Mono的脚本,扩展了YouYouText和YouYouImage(其他组件有需要自行扩展),可直接右键创建,也可以把现有Text直接转换成YouYouText!
通过代码给文本赋值,直接调用多语言管理器获取内容 |
|
|
|
声音管理
基于FMOD的声音管理器
声音数据通过表格配置
支持给声音事件传递参数,实现诸如:赛车游戏速度不同,发动机声音不同
包含背景音乐和音效 |
|
|
|
日志跟踪
可以根据功能模块的对日志进行分类
通过宏设置可以单独控制每个分类的日志开启,方便调试
不同种类日志按颜色区分,方便观看 |
|
|
|
日志管理
Reporter
通过宏设置开启日志调试模式
文本日志每次项目启动带Start标记,方便对每次游戏周期进行查找
可设置日志缓存数量
单文件最大存储数量 |
|
|
|
YouYouServer框架介绍
基于.Net Core跨平台的分布式服务器框架
数据库采用MongoDB
共享缓存采用Redis
使用.Net Code的优势:支持异步方法Async,对于数据存取、操作缓存、处理客户端发送的消息等耗时操作,全部使用异步方法,提升框架性能 |
|
|
DB和Redis
账号数据库单独存放
考虑到多个区服租用同一个云DB服务,所以每个服的DB名字带区服编号
Redis和区服相关的KEY,一样带区服编号 |
|
|
|
DB操作
所有的数据实体继承自YFMongoEntityBase,包含编号,状态,时间基本属性
数据管理继承自YFMongoDBModelBase,基类上已经实现了增删改查等常用同步和异步方法 |
|
|
|
共享缓存
昵称查重通过Redis集合验证
不同节点服务器通过Redis KEY获取共享数据
获取数据的时候通过YFRedisHelper缓存壳获取数据
缓存壳:先去Redis查,如果查不到去MongoDB查询,然后写入Redis |
|
|
HotFix
服务器端通过Assembly.LoadFile 加载可热更新程序集
处理客户端消息 操作缓存 DB等逻辑代码,全部写在YouYouServer.HotFix程序集
服务器通过特定指令重新加载程序集,加载接口实例,实现玩家不下线,修正服务器代码 |
|
|