Skip to content

Latest commit

 

History

History
134 lines (107 loc) · 8.24 KB

框架结构.md

File metadata and controls

134 lines (107 loc) · 8.24 KB

Knight的框架结构

框架结构图

knight的框架结构

核心基础库(Core Libraries)

  • CoreLib层主要是提供一系列与不依赖Knight框架的基础库,主要是由两个Package构成:Knight.Core和Knight.Core.Unity。
  • 本次设计将核心库分离成两个,一个是纯C#的代码封装,另一个是包含了Unity API的代码封装,这样做的目的主要是为了满足游戏逻辑脱离Unity的需求,比如战斗逻辑需要跑服务器上。

Pool(对象池)

  • 提供了TObjectPool泛型对象池和GameObjectPool对象池。

Async/Await(异步)

  • 引入UniTask的异步集成库,框架层和游戏逻辑已经完全摒弃Coroutine协程调用,全部采用Async/Await的方式来处理异步逻辑。
  • 同时提供了Coroutine和Async/Await两者之间的相互调用和转换。

Localization(多语言本地化)

  • 提供了多语言本地化的基础逻辑封装接口,可配合配置表GameConfig/LanguageTable来实现多语言的切换。

Event(事件系统)

  • 重新设计事件系统,采用Class/Object的思想来表达:事件类型/事件监听实例。一个事件类表示一个事件类型,类实例的对象表示一个事件监听绑定。
  • 采用模板类型构造和分发事件对象,彻底消除以前object参数传递带来的数据装箱和拆箱的GC Alloc。

TypeResolve(类型重定向)

  • 提前获取到游戏中的各个模块Assembly中的类型,以实现在任何位置获取想要的Type,而无需关心类型反射的跨域问题。
  • 在编辑器和运行时都可用。

Code Generate(代码生成)

  • 提供方便的代码生成接口,以满足框架层和逻辑层的代码生成工具的需求。

基础辅助开发库(Assist)

  • 提供一系列基础类的扩展方法,以简化代码。
  • 提供一系列基础工具辅助类(反射、路径解析、MD5计算、随机数、Log打印、单例模板)。
  • 提供一个异步实例化对象的管理器,可用于异步实例化GameObject对象。
  • 提供了一个WebRequest工具,可用于从网络上下载文件和内容。

插件三方库(ThirdLib)

Framework层

  • Framework层主要包扩:
    • Assetbundle资源管理(Knight.Framework.Assetbundle)
    • 代码热更新(Knight.Framework.Hotfix)
    • 图形渲染(Knight.Framework.Graphics)
    • 网络和协议(Knight.Framework.Network/Knight.Framework.Protobuf)
      • 游戏存档(Knight.Framework.GameSave)
    • MVMC的UI框架(Knight.Framework.UI)
    • 序列化(Knight.Framework.Serializer)
    • Shader变体管理(Knight.Framework.ShaderVariant)
  • 该层依赖于CoreLib和ThirdLib

Assetbundle资源管理(Knight.Framework.Assetbundle)

  • 自定义资源标签配置工具,根据配置决定哪些资源需要打包以及打包时的策略
  • 统一资源加载接口,自动根据依赖项加载资源
  • 自定义资源版本信息文件,实现资源包下载、更新、版本管理流程
  • 实现资源管理模块Editor Simulate和非Editor的加载接口统一,可以根据不同的资源类型自由切换
  • 伪装一些无需构建assetbundle包的资源加入到版本信息文件中,例如视频资源,可实现和assetbundle同样的逻辑进行更新和下载
  • 针对在资源打包时对assetbundle的文件头进行偏移加密,并在读取时解密

代码热更新(Knight.Framework.Hotfix)

  • 使用hybridclr实现C#的全逻辑热更新
  • 热更新DLL加入Assetbundle资源包中进行管理
  • 此种代码热更方式,不再关心热更代码的特殊写法,正常编写c#逻辑即可

图形渲染(Knight.Framework.Graphics)

  • 提供图形渲染分级的检测和设置(未完成,待续)
  • 提供URP管线摄像机堆栈的叠层管理,控制UI和场景渲染的摄像机顺序(未完成,待续)

网络和协议(Knight.Framework.Network/Knight.Framework.Protobuf)

  • 引入TouchSocket作为网络连接和数据传输的底层,基于该库封装了TCP连接和数据传输的接口
  • 引入Protobuf作为网络协议数据传输格式,在传输时序列化和反序列化网络数据

游戏存档(Knight.Framework.GameSave)

  • 提供一个用于游戏本地存档的库
  • 采用静态注入的方式调用变量设置时标记Dirty,然后在Update中检测哪些文档是Dirty的需要存储,使用多线程将内容写入本地文件
  • Android本地文件路径写入的是隐藏路径,对外不可见
  • 对写入的文件做文件流内容的异或加密处理
  • 可兼容数据版本,例如存档数据新增字段仍然能够正确的读取数据

MVMC的UI框架(Knight.Framework.UI)

  • 提供了一个以UGUI为基础的图集管理模块UIAtlasManager,可根据图片名字获取相应的图片的Sprite或者Texture2D对象
  • 实现轻量级的基于MVVM的数据绑定,完全分离数据逻辑和UI显示逻辑,提供一系列的数据、事件绑定脚本
  • 提供ViewController用于控制Model数据和ViewModel数据
  • 提供基于UGUI的常用扩展控件组(后续逐渐添加)
    • ImageReplace/RawImageReplace 用于在代码中动态替换一张图片
    • EmptGraphics 用于指定一个空白UI区域是否可以接受点击事件
    • Gradient 字体渐变脚本
    • FancyScrollRect 循环列表
    • GrayGraphics 变灰组件
    • RedPoint 小红点

序列化(Knight.Framework.Serializer)

  • 该模块提供两种序列化方式,一种是基于Nino的二进制序列化,它具备高性能、可自动生成代码、可兼容数据版本的特点
  • 另一种是纯二进制序列化,采用代码生成的方式实现
  • 目前两种在框架中都有用到,后续将考虑全部替换为Nino的序列化

Shader变体管理(Knight.Framework.ShaderVariant)

  • 该模块提供了Shader变体管理的功能,可全局收集用到的Shader变体,可增量更新新的Shader变体

编辑器工具扩展(Editor Tools Expanding)

Assetbundle Build Tools

  • 使用UIElments实现的一个资源包配置和构建的工具,用于管理和打包assetbundle

Excel Reader

  • 将Excel表格导出成Json格式的数据配置和C#的配置代码

In-game Debug Console

  • 一个三方库,用于游戏中运行时查看日志

Code Generator

  • 代码生成工具,可以生成序列化代码、配置和协议的ViewModel代码等等

Auto Build Pipeline

  • 自动构建版本的管线,整合版本构建流程,实现自动版本构建的工具(未完成,待续)

游戏部分(Game)

  • 本框架的目标是将游戏的所有逻辑写在热更新DLL里面。
  • 游戏主要由两个部分构成,热更新模块和资源。

资源

  • GameAssets是原始资源,这些原始资源将会被打包成为Assetbundle包供游戏使用。
  • Assetbundle Packages是用在游戏中的原始资源包。

游戏热更新模块(HofixModule Game Logic)

  • 热更新端的核心库(Hotfix Core Lib)
  • GUI Logic,游戏的GUI逻辑部分
  • Battle Logic,游戏的战斗逻辑部分