GameFramework篇:前言

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_15020543/article/details/83746352

到了现在,我感觉到对引擎的熟悉程度差不多了,也能自己做点小项目,可是着手写大点的项目的时候,经常会有无从下手的感觉,设计模式也看了,别人源码也能看懂,可是就是写不出人家那种水平的代码,于是我决定学习一个游戏框架,熟悉他的流程,思想,并且应用到项目中。

我写这个专栏的动机如下:

  • 学完整理成博客,让自己理解更深刻。

  • 互联网教会了我很多,我要尽自己的一份薄力回报。

  • 希望帮助到学习这个框架的人。

GameFramework是Ellan大神的开源框架,下面是官网简介:

Game Framework 是一个基于 Unity 5.3+ 引擎的游戏框架,主要对游戏开发过程中常用模块进行了封装,很大程度地规范开发过程、加快开发速度并保证产品质量。

在最新的 Game Framework 版本中,包含以下 17 个内置模块,后续我们还将开发更多的扩展模块供开发者使用。

  1. 数据结点 (Data Node) – 将任意类型的数据以树状结构的形式进行保存,用于管理游戏运行时的各种数据。

  2. 数据表 (Data Table) – 可以将游戏数据以表格(如 Microsoft Excel)的形式进行配置后,使用此模块使用这些数据表。数据表的格式是可以自定义的。

  3. 调试器 (Debugger) – 当游戏在 Unity 编辑器中运行或者以 Development 方式发布运行时,将出现调试器窗口,便于查看运行时日志、调试信息等。用户还可以方便地将自己的功能注册到调试器窗口上并使用。

  4. 下载 (Download) – 提供下载文件的功能,支持断点续传,并可指定允许几个下载器进行同时下载。更新资源时会主动调用此模块。

  5. 实体 (Entity) – 我们将游戏场景中,动态创建的一切物体定义为实体。此模块提供管理实体和实体组的功能,如显示隐藏实体、挂接实体(如挂接武器、坐骑,或者抓起另一个实体)等。实体使用结束后可以不立刻销毁,从而等待下一次重新使用。

  6. 事件 (Event) – 游戏逻辑监听、抛出事件的机制。Game Framework 中的很多模块在完成操作后都会抛出内置事件,监听这些事件将大大解除游戏逻辑之间的耦合。用户也可以定义自己的游戏逻辑事件。

  7. 有限状态机 (FSM) – 提供创建、使用和销毁有限状态机的功能,一些适用于有限状态机机制的游戏逻辑,使用此模块将是一个不错的选择。

  8. 本地化 (Localization) – 提供本地化功能,也就是我们平时所说的多语言。Game Framework 在本地化方面,不但支持文本的本地化,还支持任意资源的本地化,比如游戏中释放烟花特效也可以做出几个多国语言的版本,使得中文版里是“新年好”字样的特效,而英文版里是“Happy New Year”字样的特效。

  9. 网络 (Network) – 提供使用 Socket 长连接的功能,当前我们支持 TCP 协议,同时兼容 IPv4 和 IPv6 两个版本。用户可以同时建立多个连接与多个服务器同时进行通信,比如除了连接常规的游戏服务器,还可以连接语音聊天服务器。如果想接入 ProtoBuf 之类的协议库,只要派生自 Packet 类并实现自己的消息包类即可使用。

  10. 对象池 (Object Pool) – 提供对象缓存池的功能,避免频繁地创建和销毁各种游戏对象,提高游戏性能。除了 Game Framework 自身使用了对象池,用户还可以很方便地创建和管理自己的对象池。

  11. 流程 (Procedure) – 是贯穿游戏运行时整个生命周期的有限状态机。通过流程,将不同的游戏状态进行解耦将是一个非常好的习惯。对于网络游戏,你可能需要如检查资源流程、更新资源流程、检查服务器列表流程、选择服务器流程、登录服务器流程、创建角色流程等流程,而对于单机游戏,你可能需要在游戏选择菜单流程和游戏实际玩法流程之间做切换。如果想增加流程,只要派生自 ProcedureBase 类并实现自己的流程类即可使用。

  12. 资源 (Resource) – 为了保证玩家的体验,我们不推荐再使用同步的方式加载资源,由于 Game Framework 自身使用了一套完整的异步加载资源体系,因此只提供了异步加载资源的接口。不论简单的数据表、本地化字典,还是复杂的实体、场景、界面,我们都将使用异步加载。同时,Game Framework 提供了默认的内存管理策略(当然,你也可以定义自己的内存管理策略)。多数情况下,在使用 GameObject 的过程中,你甚至可以不需要自行进行 Instantiate 或者是 Destroy 操作。

  13. 场景 (Scene) – 提供场景管理的功能,可以同时加载多个场景,也可以随时卸载任何一个场景,从而很容易地实现场景的分部加载。

  14. 配置 (Setting) – 以键值对的形式存储玩家数据,对 UnityEngine.PlayerPrefs 进行封装。

  15. 声音 (Sound) – 提供管理声音和声音组的功能,用户可以自定义一个声音的音量、是2D声音还是3D声音,甚至是直接绑定到某个实体上跟随实体移动。

  16. 界面 (UI) – 提供管理界面和界面组的功能,如显示隐藏界面、激活界面、改变界面层级等。不论是 Unity 内置的 uGUI 还是其它类型的 UI 插件(如 NGUI),只要派生自 UIFormLogic 类并实现自己的界面类即可使用。界面使用结束后可以不立刻销毁,从而等待下一次重新使用。

  17. Web 请求 (Web Request) – 提供使用短连接的功能,可以用 Get 或者 Post 方法向服务器发送请求并获取响应数据,可指定允许几个 Web 请求器进行同时请求。

我觉得最重要的是理解第11个,流程的含义,因为它贯穿整个游戏,游戏的开始,更新,结束它都在参与。

Ellan大神的GitHub:https://github.com/EllanJiang

GF官网:http://gameframework.cn/

GF官方交流群:216332935(带佬超级多)

已经有大佬开始为这个框架写教程了,可是让我这样的小白看,有时还是有点吃力,所以我就以小白的的身份写教程。(这里的小白指的不是Unity小白,是游戏框架方面的小白,如果对Unity不够熟悉,就先去写点小项目吧,不然学习这个框架很吃力,事倍功半。

笨木头的GF教程:http://www.benmutou.com/archives/2473

自然妙有猫仙人的GF教程:https://blog.csdn.net/qq_32821435/article/details/80469748

有人说,框架只会限制自己,成不了气候,我觉得是他用框架的方法不对,我们不能只循规蹈矩,而是要参透它的思想,并在其基础上进行最适合自己项目的改动。也可能是我没到那个境界~

这个专栏的更新可能会很慢,因为学这个框架确实不容易,我要确保把某一部分看懂了,才发教程,不然误人子弟就不好了~当然,欢迎大家指出我文章的不足,共同把它变得更好,让更多人知道这个强大的框架。

猜你喜欢

转载自blog.csdn.net/qq_15020543/article/details/83746352