GameFramework框架详解之(一)框架总览

Unity 专栏收录该内容
190 篇文章 16 订阅

一.前言

  • 目前市场上有很多优秀个开源框架,比如ET,GameFramework,DBFramework,StrangeIOC,Loxodon-Framework,KSFramework,xluaFramework等等。其中要说规范的话,不得不说GameFramework还是不错的,当然很多新手看到后会觉的有点复杂,写一个小小的功能,不得不套用一堆东西,继承一堆接口,感觉不知所措,不能随心所欲的去撸代码。其实这个框架就是为了约束新手的行为的,让我们面向接口编程,遵循“开闭”的设计原则来写代码,方便后期的扩展和维护。我觉的这个框架是非常适合新手的。等到你可以随心所欲的在GameFramework框架中写代码的时候,就说明你的能力提升了一大截。

  • 为了更好的让大家理解和使用EllanJiang/GameFramework - GitHub。群主不仅给我们建立了详细的文档教程,更是给我们写了一个详细的Demo:StartForce,真心的感谢作者:EllanJiang。

  • 那么既然作者都写了那么详细的教程了,我为什么还要写这个系列的文章呢?我从两方面考虑:
    1.我自己在写项目,搭框架的时候,踩过很多坑,深知框架的水有多深,也从GameFramework获得过很多灵感,学习了很多东西,所以作为致敬也好,作为推广也好。我真心希望更多的人都能接触到GameFramework,都能从框架中学到东西。
    2.既然都花了时间去研究GameFramework了,我肯定不能就这么看完算了,以我的个性,必须要做个学习笔记啊,方便以后回顾。也方便大家从另一个角度去学习GameFramework。


GameFramework以下简称GF
UnityGameFramework以下简称UGF

二.框架程序集简介

Demo框架分层

  • 1.GameFramework,在Package/GameFramework/Libraries目录下,以dll形式存在

  • 2.UnityGameFramework,在Package/Runtime/目录下,以源码形式存在

  • 3.StartForce,在Assets/GameMain/Scripts/目录下,以源码形式存在,其实就是自己的项目应用GF框架后,自定义的类

程序集解释

  • GameFramework – 封装基础游戏逻辑,如数据管理、资源管理、文件系统、对象池、有限状态机、本地化、事件、实体、网络、界面、声音等,此部分逻辑实现不依赖于 Unity 引擎,以程序集的形式提供。GF框架是基础框架,只是一个架子,可以在任何游戏引擎去使用,比如cocos,unreal,unity,egret,laya等,所以GF是没有办法直接使用的所以后面我们还需要UGF框架。GF框架中都是大量的IxxxManager和xxxManager,是模块的总管理器。定义接口是为了规范,为了面向接口编程。
  • UnityGameFramework.Runtime – 依赖 UnityEngine.dll 进行对 GameFramework.dll 的补充实现。为了方便兼容 Unity 的各个版本,此部分已经以代码的形式包含在 Unity 插件中。UGF框架其实就是在Unity引擎基础上,对GF的扩展,实现一些Unity可以直接使用类和组件。UGF是可以直接在Unity中使用的,可以基于UGF直接开发游戏的。UGF中有大量的xxxComponent模块类,其实是对GF框架中的xxxManager的一层封装和填充,既保证了使用GF的接口加载,又保证了使用Unity引擎中的类来填充GF中xxxManager的加载器,Helper等类,因为GF中这些DataProvider类都是空的,UGF中对多个DataProvider类进行重写,或者,我们可以根据GF定的架构,自己扩展UGF的DataProvider或者xxxComponent。
  • UnityGameFramework.Editor – 依赖 UnityEditor.dll 进行对工具、Inspector 的实现。为了方便兼容 Unity 的各个版本,此部分已经以代码的形式包含在 Unity 插件中。
  • StartForce - 是一个Demo,基于UGF的Demo。在多个模块中,不需要再实现框架的管理类了,只需要具体的实现,比如DataTable,UIForm, Procedure,Entity等模块都是只写了具体的表实体,UI实体,Procedure实体,Entity实体,然后使用UGF的框架,直接加载,使用什么的。

在这里插入图片描述

三.模块功能描述

框架模块描述
GameFrameworkGF命名空间下是一些事件基类,数据提供者接口,任务基类,Utility相关类
GameFramework.Config全局配置组件,存储一些全局的只读的游戏配置,如玩家初始速度、游戏初始音量等。
GameFramework.DataNode数据节点,将任意类型的数据以树状结构的形式进行保存,用于管理游戏运行时的各种数据。
GameFramework.DataTable数据表,可以将游戏数据以表格(如 Microsoft Excel)的形式进行配置后,使用工具导出这些数据表。数据表的格式是可以自定义的。
GameFramework.Debugger调试器窗口,当游戏在 Unity 编辑器中运行或者以 Development 方式发布运行时,将出现调试器窗口,便于查看运行时日志、调试信息等。使用者还可以方便地将自己的功能注册到调试器窗口上并使用。
GameFramework.Download下载器,提供下载文件的功能,支持断点续传,并可指定允许几个下载器进行同时下载。更新资源时会主动调用此模块。
GameFramework.Entity实体组件,我们将游戏场景中,动态创建的一切物体定义为实体。此模块提供管理实体和实体组的功能,如显示隐藏实体、挂接实体(如挂接武器、坐骑,或者抓起另一个实体)等。实体使用结束后可以不立刻销毁,从而等待下一次重新使用。
GameFramework.Event游戏事件监听、抛出的机制。Game Framework 中的很多模块在完成操作后都会抛出内置事件,监听这些事件将大大解除游戏逻辑之间的耦合。除了 Game Framework 内置事件外,使用者也可以定义自己的游戏逻辑事件,游戏中所有事件均派生自 GameEventArgs 类,事件对象使用了引用池技术,以避免使用事件过程中频繁的内存分配。
GameFramework.FileSystem文件系统,提供创建、使用和销毁有限状态机的功能,一些适用于有限状态机机制的游戏逻辑,使用此模块将是一个不错的选择。
GameFramework.Fsm提供创建、使用和销毁有限状态机的功能,一些适用于有限状态机机制的游戏逻辑,使用此模块将是一个不错的选择。
GameFramework.Localization提供本地化功能,也就是我们平时所说的多语言。Game Framework 在本地化方面,不但支持文本的本地化,还支持任意资源的本地化,比如游戏中释放烟花特效也可以做出几个多国语言的版本,使得中文版里是“新年好”字样的特效,而英文版里是“Happy New Year”字样的特效。
GameFramework.Network提供使用 Socket 长连接的功能,当前我们支持 TCP 协议,同时兼容 IPv4 和 IPv6 两个版本。用户可以同时建立多个连接与多个服务器同时进行通信,比如除了连接常规的游戏服务器,还可以连接语音聊天服务器。如果想接入 ProtoBuf 之类的协议库,只要派生自 Packet 类并实现自己的消息包类即可使用。
GameFramework.ObjectPool提供对象缓存池的功能,避免频繁地创建和销毁各种游戏对象,提高游戏性能。除了 Game Framework 自身使用了对象池,用户还可以很方便地创建和管理自己的对象池。
GameFramework.Procedure是贯穿游戏运行时整个生命周期的有限状态机。通过流程,将不同的游戏状态进行解耦将是一个非常好的习惯。对于网络游戏,你可能需要如检查资源流程、更新资源流程、检查服务器列表流程、选择服务器流程、登录服务器流程、创建角色流程等流程,而对于单机游戏,你可能需要在游戏选择菜单流程和游戏实际玩法流程之间做切换。如果想增加流程,只要派生自 ProcedureBase 类并实现自己的流程类即可使用。
GameFramework.Resource为了保证玩家的体验,我们不推荐再使用同步的方式加载资源,由于 Game Framework 自身使用了一套完整的异步加载资源体系,因此只提供了异步加载资源的接口。不论简单的数据表、本地化字典,还是复杂的实体、场景、界面,我们都将使用异步加载。同时,Game Framework 提供了默认的内存管理策略(当然,你也可以定义自己的内存管理策略)。多数情况下,在使用 GameObject 的过程中,你甚至可以不需要自行进行 Instantiate 或者是 Destroy 操作。
GameFramework.Scene提供场景管理的功能,可以同时加载多个场景,也可以随时卸载任何一个场景,从而很容易地实现场景的分部加载。
GameFramework.Setting以键值对的形式存储玩家数据,对 UnityEngine.PlayerPrefs 进行封装,也可以将这些数据直接存储在磁盘上。
GameFramework.Sound提供管理声音和声音组的功能,用户可以自定义一个声音的音量、是 2D 声音还是 3D 声音,甚至是直接绑定到某个实体上跟随实体移动。
GameFramework.UI提供管理界面和界面组的功能,如显示隐藏界面、激活界面、改变界面层级等。不论是 Unity 内置的 uGUI 还是其它类型的 UI 插件(如 NGUI),只要派生自 UIFormLogic 类并实现自己的界面类即可使用。界面使用结束后可以不立刻销毁,从而等待下一次重新使用。
GameFramework.WebRequest提供使用短连接的功能,可以用 Get 或者 Post 方法向服务器发送请求并获取响应数据,可指定允许几个 Web 请求器进行同时请求。

四.类图展示

要想弄清楚框架的结构,需要我们对整个项目的结构有一个预览,大致知道谁对谁。所以呢,我把Demo中的脚本拆解,追溯到基类UGF和GF框架中,把每个类的基类找到,描绘成下面的结构图。方便查找每个类的位置和继承体系。

1.GameFramework总类图

在这里插入图片描述

2.UnityGameFramework总类图

在这里插入图片描述

3.StartForce总类图

在这里插入图片描述

好了,本篇我们先大致对框架有个了解,希望这篇文章对你有所帮助。

  • 14
    点赞
  • 2
    评论
  • 29
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页

打赏

PassionY

你的赞同是对我的鼓励

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值