Ehfw by 95eh - 2

Frameworks

基于unity的开发框架

Unknown VersionUnknown LicenseUpdated 28 days agoCreated on October 22nd, 2019
Go to source

EHFW框架简介

  • EHFW是一个基于Unity3D引擎的应用开发框架,主要封装了应用开发过程中常用模块,规范开发过程并提高开发效率.
  • 本框架已基本完成,欢迎提出宝贵意见.
  • QQ群:774394701

架构图

image

该框架尽量少的在场景中的GameObject上挂载代码组件.只需挂载FW单例类以及实现IMode接口的类,并简单设置即可. 目前版本包含25个内置模块,这些模块都使用接口注入,开发者可以自己实现接口替换.自定义模块尽量也使用接口注入到FW单例类中,FW类提供多种多态方法注入模块,详见FW类注释.

内置模块

  • FW(继承MonoBehavior类):单例类,管理所有的模块,通过模式(实现IMode接口的类)注入内置模块,并可以注入自定义模块.
  • ModeBase(继承MonoBehavior类,实现IMode接口):注入内置模块.
  • MThread(实现IMThread接口):线程池模块,基于C#线程池封装.Unity3D引擎中子线程无法使用引擎中特有的类型.该模块可以将复杂数据计算在子线程中完成后,将结果返回到主线程,避免降低主线程的帧率.
  • MAsync(实现IMAsync接口):主线程异步模块,将Unity3D引擎中特有类型的密集运算无法使用子线程计算的任务分摊到帧上计算,避免单帧运算量过大.
  • MPool(实现IMPool接口):对象池模块,按类型或标签注册对象池,使对象实例可复用,减少系统垃圾回收消耗.
  • MLog(实现IMLog接口):日志模块,日志分为5个等级,分别为:Debug,Info,Warn,Error,Fatal.可注入不同日志类,例如编辑器打印日志,保存文本日志,也可以扩展邮件日志等.
  • MTimer(实现IMTimer接口):计时器模块,传入计时时长,重复次数以及触发回调,简化基于Time.detalTime计时使用.
  • MConn(实现IMConn接口):长连接模块,封装Socket长连接的管理,消息包序列化\反序列化,粘包\分包等基础功能,可扩展消息包加密,可扩展Websocket连接.
  • MHttp(实现IMHttp接口):短连接模块,简化Unity的Http请求相关的调用,可扩展模拟服务器响应,方便测试.
  • MNotice(实现IMNotice接口):消息模块,注入指定消息名的回调函数,当派发消息时,将数据传入所有注册该消息名的回调函数.利于代码的解耦.
  • MData(实现IMData接口):全局数据模块,管理应用开发中全局数据.
  • MAsset(实现IMAsset接口):资源模块,基于Unity3D官方的Addressables可寻址资源管理,加载资源,实例化资源等.
  • MVer(实现IMVer接口):版本更新模块,校验本地资源和服务端资源版本,增量更新.
  • MDownload(实现IMDownload接口):资源下载模块,支持断点续传.
  • MScene(实现IMScene接口):场景模块,管理Unity3D中的场景文件(.scene)加载\卸载,可绑定场景组件**(实现ISceneComponent接口的类)到场景中的游戏对象节点.当场景加载完成后触发场景组件的初始化,不需要将代码手动挂载到场景.
  • MAudio(实现IMAudio接口):音频模块,封装Unity3D的音频播放,可设置音频监听对象,播放音源,设置音频混合器,设置快照.
  • MI18N(实现IMI18N接口):语言本地化模块,加载不同语言的配置文件,可运行时切换刷新界面.
  • MKey(实现IMKey接口):快捷键模块,按事件名称绑定键盘按键到回调函数,可替换快捷键.
  • MCmd(实现IMCmd接口):命令模块,按命令名注册命令类,传入命令名和数据,执行对应的命令.
  • MRecorder(实现IMRecorder接口):命令记录模块,记录命令的执行顺序,可以撤销\重做命令,可扩展序列化\反序列化用户的操作并实现回放.
  • MFsm(实现IMFsm接口):有限状态机模块,内置一个主状态机控制应用的主状态,也可自定义子状态机.
  • MUI(实现IMUI接口):界面模块,绑定界面类(实现IUI接口)到界面预制体资源,加载界面类实例时,自动加载对应的界面预制体资源并完成初始化.无需将界面脚本挂载到界面预制体资源.
  • MEntity(实现IMEntity接口):实体模块,注入实体工厂类(实现IEntityFactory接口的类),管理所有的实体对象,并通过工厂类组装\卸载实体对象的Component实体组件(实现IComponent接口的类,持有不同分类数据,并能广播数据变化的事件)
  • MComponent(实现IMComponent接口):实体组件模块,管理所有的实体组件,并使用对象池创建\回收实体组件
  • MSystem(实现IMSystem接口):系统模块,注册\移除\获取系统(实现ISystem接口的类,提供功能API,便于实现ICmd接口类的调用.)
  • MActor(实现IMActor接口):演员模块,注入演员工厂类(实现IActorFactory接口的类) ,管理三维显示对象,并通过工厂类组装\卸载显示对象的ActorComponent演员组件(实现IActorComponent接口的类,包含美术资源模型的显示,用户交互处理,物理属性等,注册实体\实体组件的数据变化事件)
  • MActorComponent(实现IMActorComponent接口):演员组件模块,管理所有演员组件

详细API请看响应接口的注释

依赖DLL

使用说明

  • 新建一个空的场景,并新建一个空的GameObject,命名为App或者其他.

  • 将FW类挂载到App上.

  • 新建一个类继承ModeBase或者实现IMode接口,将该类挂载到App上,并设置相关参数.

  • 在App上挂载一个Camera,将Clear Flags设置为Don't Clear,并将Culling Mask设置为Nothing.该摄像机主要用于表面在程序启动时没有摄像机.

  • 在App下面新建一个子对象并将其拖拽到AppMode下的Canvas上. 结果如下图: image

  • 在Assets目录建立如下目录,便于代码管理.当然这只是建议.

├─App               //项目文件夹
│  ├─ActorComponent //演员组件类.继承ActorComonentBase.
│  ├─Cmd            //命令类.实现ICmd接口.
│  ├─Component      //实体组件类.继承ComponentBase.
│  ├─Factory        //工厂类.演员工厂继承ActorFactoryBase,实体工厂继承EntityFactoryBase.
│  ├─Recorder       //记录类.实现IRecorder类.
│  ├─SceneComponent //场景组件类.继承SceneComponentBase类.
│  ├─Src            //美术资源
│  ├─State          //状态类.实现IState接口
│  └─System         //系统类.继承SystemBase类

API详见相关接口或父类的注释

  • 将依赖的DLL文件拷贝到Plugins文件夹中

框架运行流程

有空补上

路线图

Show all projects by 95eh