推荐阅读
- CSDN主页
- GitHub开源地址
- Unity3D插件分享
- 简书地址
- 我的个人博客
大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。
一、前言
【GameFramework框架】系列教程目录:
https://blog.csdn.net/q764424567/article/details/135831551
这是GameFramework框架教程的第一篇,但是博主不准备直接就讲GameFramework框架。
博主准备从框架开始说起,讲讲框架的“前世今生”,心急的小伙伴可以直接跳转到下一篇:【GameFramework框架】二、GameFramework框架介绍了。
二、框架(Framework)介绍
2-1、框架(Framework)是什么
框架(Framework)通常被理解为一种基础要素的集合,它们用于承载系统的必要功能。
在不同的技术和领域中,如IT和软件开发,框架具有特定的意义和作用:
- 约束性:框架定义了解决特定问题的边界,并将相关的软件组件约束在这个范围内,以保持框架的内聚性和解决问题的专注性。
- 支撑性:框架本身不直接解决问题,而是提供一个基础的支撑结构,使得在其上构建的解决方案更为灵活和高效。框架通常会包括一系列的约定、配置和工具,这些辅助性工具帮助开发者简化复杂任务,提高开发效率。
框架可以被视为一种未完成的半成品,需要在使用时赋予它具体的业务含义。
常见的例子包括模型-视图-控制器(MVC
)、WPF
等,它们包含了对特定问题的解决方法的设计模式,以及一系列的工具和库,以便于开发者快速搭建和维护应用。
综上所述,框架是一种设计模式,旨在通过预定义的结构和规则来简化复杂系统的开发过程,同时确保系统的稳定性和可扩展性。
PS:上面的内容摘录自度娘
刚开始接触框架的童鞋是不是感觉已经有点懵了,这里我再用一个简单的例子
给大家解释一下框架:
小明早上出门要去出差,他会在自己的包里放入:牙膏、牙刷、毛巾、充电器、充电宝、纸巾、湿巾、U盘、钥匙等等。小明要取钥匙,然后就在包里翻了半天,最后把东西全部倒出来,才找到了钥匙。
---
后来,小明找了一个女朋友小红,小红总是会在小明出门前将小明的包里面的东西整理一下:充电器、充电宝、钥匙、纸巾、湿巾等常用的放在最外侧的兜里;
U盘小玩意放到内侧小兜里;
牙膏、牙刷、毛巾放到内包里。这样,小明要找钥匙的时候,直接去外侧找,一下就找到了钥匙。
这个例子呢,就很生动了说明了框架是什么。
框架就是在架构内构建了一套固定流程,开发人员按照这个流程,以及条条框框进行开发,知道自己的函数写在那里,如何架构,会快速找到自己想要的东西,以此来提高开发效率。
框架指的是在某些应用领域具有通用的完备功能的底层服务,使用框架的编程人员可以在一个通用的实现的基础上开始具体的系统开发。框架提供了抽象的默认行为类集合,具体的实现可以通过重写子类或组装对象来支持应用特有的功能模块。
2-2、为什么用框架(Framework)
简单说就是提高工作效率。
框架是一个可复用的设计构件,规定了应用的体系结构,设计了协作构件之间的依赖关系、责任分配和流程控制,表现为一组抽象类以及其实例之间的协作的方法。
作为一名程序员,在开发过程中会发现,有框架和没有框架开发起来效率差距有多大。
一个好的框架可以带来更快的开发效率、提高程序的健壮性和鲁棒性、提高程序的性能、提高团队协作、方便后续功能维护和拓展等。
2-3、怎么用框架(Framework)
使用框架的话可以先找一些框架的文档、教程等东西先学习。
然后找一些案例进行学习,使用框架的功能,有不清楚的地方再回头仔细看这部分额文档。
当对于某个框架用的比较熟悉的时候,就可以分析框架的原理和实现过程,以及功能为什么这么设计。再用来优化之前的项目。
当然,更进一步的话,可以学习源码,为框架做贡献。
2-4、怎么设计框架(Framework)
框架与具体功能的实现不一样,框架强调的是软件的设计重用性和可拓展性。
好的框架是相对的,它有自己特定的应用领域,合适的才是最好的。
比如你做虚仿项目使用一个游戏框架,里面的网络通信、帧同步、战斗模块你可能永远都用不上,这不就有点浪费了嘛。
言归正传,设计框架,需要在实际开发中的具体情况来看,细想架构需要分三层还是五层,每个层之间如何解耦,要用什么设计模式。
当然,设计框架的目的还是效率,一些不常用的功能可以在写的时候留下拓展方案或思路,在以后实际用上的时候再添加上,慢慢升级框架。
还可以在使用过程中提高能力和积累经验,将学习到的新技术新知识融合到框架中,使得框架更加强大,更加健壮。
框架通过小步快跑,不断迭代升级来慢慢拓展,当项目应用框架后,再根据新需求和碰到的问题去调整,让框架更加强大。
设计框架的时候有以下几个要求:
1、代码模板化
框架一般都有统一的代码风格,同一分层的不同类代码,都是大同小异的模板化结构,方便使用模板工具统一生成,减少大量重复代码的编写。在学习时通常只要理解某一层有代表性的一个类,就等于了解了同一层的其他大部分类结构和功能,容易上手。团队中不同的人员采用类同的调用风格进行编码,很大程度提高了代码的可读性,方便维护与管理。
2、重用
开发框架一般层次清晰,不同开发人员开发时都会根据具体功能放到相同的位置,加上配合相应的开发文档,代码重用会非常高,想要调用什么功能直接进对应的位置去查找相关函数,而不是每个开发人员各自编写一套相同的方法。
3、高内聚(封装)
框架中的功能会实现高内聚,开发人员将各种需要的功能封装在不同的层中,给大家调用,而大家在调用时不需要清楚这些方法里面是如果实现的,只需要关注输出的结果是否是自己想要的就可以了。
4、规范
框架开发时,必须根据严格执行代码开发规范要求,做好命名、注释、架构分层、编码、文档编写等规范要求。因为你开发出来的框架并不一定只有你自己在用,要让别人更加容易理解与掌握,这些内容是非常重要的。
5、可扩展
开发框架时必须要考虑可扩展性,当业务逻辑更加复杂、数量记录量爆增、并发量增大时,能否通过一些小的调整就能适应?还是需要将整个框架推倒重新开发?当然对于中小型项目框架,也不必考虑太多这些内容,当个人能力和经验足够时水到渠成,自然就会注意到很多开发细节。
7、可维护
成熟的框架,对于二次开发或现有功能的维护来说,操作上应该都是非常方便的。比如项目要添加、修改或删除一个字段或相关功能,只需要简单的操作,十来分钟或不用花太多的工夫就可以搞定。新增一个数据表和对应的功能,也可以快速的完成。功能的变动修改,不会对系统产生不利的影响。代码不存在硬编码等等,保证软件开发的生产效率和质量。
8、协作开发
有了开发框架,我们才能组织大大小小的团队更好的进行协作开发,成熟的框架将大大减轻项目开发的难度,加快开发速度,降低开发费用,减轻维护难度。
9、通用性
同一行业或领域的框架,功能都是大同小异的,不用做太大的改动就可以应用到类似的项目中。在框架中,我们一般都会实现一些同质化的基础功能,比如权限管理、角色管理、菜单管理、日志管理、异常处理…或该行业中所要使用到的通用功能,使框架能应用到某一行业或领域中,而不是只针对某公司某业务而设定(当然也肯定存在那些特定功能的应用框架,这只是非常少的特殊情况,不在我们的考虑范围)。
2-5、常用的Unity3D框架(Framework)
2-5-1、MVC框架
基础常用的框架
表现层(View):游戏画面。UI
逻辑层(Controller):数据接口,操作控制,AI
数据层(Model):数据保存,图片、声音等资源
2-5-2、MVP框架
MVP从MVC演变而来,通过表示器将视图与模型巧妙地分开。在该模式中,视图通常由表示器初始化,它呈现用户界面(UI)并接受用户所发出命令,但不对用户的输入作任何逻辑处理,而仅仅是将用户输入转发给表示器。
MVP的全称为Model-View-Presenter,Model提供数据,View负责显示,Controller/Presenter负责逻辑的处理。MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter(MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过Controller。
2-5-3、MVVM框架
MVVM 模式将MVP中的 Presenter 改名为 ViewModel,基本上与 MVP 模式完全一致。
MVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版。MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。
MVVM(Model-View-ViewModel)框架的由来便是MVP(Model-View-Presenter)模式与WPF结合的应用方式时发展演变过来的一种新型架构框架。它立足于原有MVP框架并且把WPF的新特性糅合进去,以应对客户日益复杂的需求变化。
2-5-4、PureMVC框架
最核心的三个层,Model,View,Controller
PureMVC在传统MVC基础上做了许多的改进,通过结合多个“设计模式”的应用,让耦合性变得更低,也变得更加的易用,在扩展性,灵活性,重用性方面也做得更好。
设计模式的存在,其实很重要的一个职责就是解决耦合性。PureMVC用到的这些设计模式,贯穿了整个游戏框架,即便你项目中使用的不是MVC框架,你都离不开这些设计模式的应用,下面是PureMVC中使用到的设计模式:
1.代理设计模式
2.中介者设计模式
3.外观设计模式
4.观察者设计模式
5.命令设计模式
6.单例设计模式
2-5-5、MVCS框架
StrangeIOC中所指 MVCS 的 “S”,为服务(程序外部的服务例如:web服务)
StrangeIoc 是依据控制反转和解耦原理设计的,支持依赖注入。
控制反转即Ioc(Inversion of Control) 它把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理。所为的“控制反转”概念就是对组件对象控制权的转移,从程序代码本身转移到了内部的容器。
依赖注入(Dependency Injection) 依赖注入的基本原则是:应用组件不应该负责查找资源或者其他依赖的写作对象。配置对象的工作应该由Ioc容器负责
2-5-6、ECS框架
Unity本身的组件开发就是ECS框架,ECS很适合游戏开发,在游戏引擎中比较常见,谷歌曾在Github上发布了一个名叫Entitas的ECS框架,下面我们就来介绍
Entity就是只有数据的GameObject对象,不包括方法
每一个Entity拥有Component组件,负责Entity数据处理
Group是拥有相同Component的Entity集合
Context就是创建销毁Entity的工厂
Collector收集器提供了简单的方法来处理Group中Entity变化的反应。
2-5-7、GameFramework游戏框架
OK,说到我们这系列文章的主角了,GameFramework游戏框架。
Game Framework 是一个基于 Unity 引擎的游戏框架,主要对游戏开发过程中常用模块进行了封装,很大程度地规范开发过程、加快开发速度并保证产品质量。
内置模块有:
◾基础和工具
◾全局配置 (Config)
◾数据结点 (Data Node)
◾数据表 (Data Table)
◾调试器 (Debugger)
◾下载 (Download)
◾实体 (Entity)
◾事件 (Event)
◾有限状态机 (FSM)
◾本地化 (Localization)
◾网络 (Network)
◾对象池 (Object Pool)
◾流程 (Procedure)
◾资源 (Resource)
◾场景 (Scene)
◾游戏配置 (Setting)
◾声音 (Sound)
◾界面 (UI)
◾Web 请求 (Web Request)
完整的 Game Framework 包含三部分:
◾GameFramework – 封装基础游戏逻辑,如数据管理、资源管理、对象池、有限状态机、本地化、事件、实体、网络、界面、声音等,此部分逻辑实现不依赖于 Unity 引擎,以程序集的形式提供。
◾UnityGameFramework.Runtime – 依赖 UnityEngine.dll 进行对 GameFramework.dll 的补充实现。为了方便兼容 Unity 的各个版本,此部分已经以代码的形式包含在 Unity 插件中。
◾UnityGameFramework.Editor – 依赖 UnityEditor.dll 进行对工具、Inspector 的实现。为了方便兼容 Unity 的各个版本,此部分已经以代码的形式包含在 Unity 插件中。
2-5-8、SFramework游戏框架
Sunset Game 制作组自主设计研发的一款Unity通用游戏框架,设计思想类似MVC+ECS。
不限于3D-ARPG游戏的万能框架 Unity-Framework
独立设计开发的原创游戏框架,持续更新中
控制游戏生命周期,框架尽量不继承Monobehavior
基于单例模式,外观模式,桥接模式等设计模式
可使用PhysX物理引擎,动画帧事件等基于Monobehavior的功能
代码追求精简高效,核心代码仅5000+行
三、后记
如果觉得本篇文章有用别忘了点个关注,关注不迷路,持续分享更多Unity干货文章。
你的点赞就是对博主的支持,有问题记得留言:
博主主页有联系方式。
博主还有跟多宝藏文章等待你的发掘哦:
专栏 | 方向 | 简介 |
---|---|---|
Unity3D开发小游戏 | 小游戏开发教程 | 分享一些使用Unity3D引擎开发的小游戏,分享一些制作小游戏的教程。 |
Unity3D从入门到进阶 | 入门 | 从自学Unity中获取灵感,总结从零开始学习Unity的路线,有C#和Unity的知识。 |
Unity3D之UGUI | UGUI | Unity的UI系统UGUI全解析,从UGUI的基础控件开始讲起,然后将UGUI的原理,UGUI的使用全面教学。 |
Unity3D之读取数据 | 文件读取 | 使用Unity3D读取txt文档、json文档、xml文档、csv文档、Excel文档。 |
Unity3D之数据集合 | 数据集合 | 数组集合:数组、List、字典、堆栈、链表等数据集合知识分享。 |
Unity3D之VR/AR(虚拟仿真)开发 | 虚拟仿真 | 总结博主工作常见的虚拟仿真需求进行案例讲解。 |
Unity3D之插件 | 插件 | 主要分享在Unity开发中用到的一些插件使用方法,插件介绍等 |
Unity3D之日常开发 | 日常记录 | 主要是博主日常开发中用到的,用到的方法技巧,开发思路,代码分享等 |
Unity3D之日常BUG | 日常记录 | 记录在使用Unity3D编辑器开发项目过程中,遇到的BUG和坑,让后来人可以有些参考。 |