【GameFramework框架】一、框架介绍

推荐阅读

  • 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之UGUIUGUIUnity的UI系统UGUI全解析,从UGUI的基础控件开始讲起,然后将UGUI的原理,UGUI的使用全面教学。
Unity3D之读取数据文件读取使用Unity3D读取txt文档、json文档、xml文档、csv文档、Excel文档。
Unity3D之数据集合数据集合数组集合:数组、List、字典、堆栈、链表等数据集合知识分享。
Unity3D之VR/AR(虚拟仿真)开发虚拟仿真总结博主工作常见的虚拟仿真需求进行案例讲解。
Unity3D之插件插件主要分享在Unity开发中用到的一些插件使用方法,插件介绍等
Unity3D之日常开发日常记录主要是博主日常开发中用到的,用到的方法技巧,开发思路,代码分享等
Unity3D之日常BUG日常记录记录在使用Unity3D编辑器开发项目过程中,遇到的BUG和坑,让后来人可以有些参考。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/660399.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tableau绘制雷达图

目标图形: 1. 数据准备 (1)原始数据 你要进行用雷达图比较的对象的各指标的数据。 (2) 处理后数据 在原数据的基础上添加对各指标进行区间的划分数据,也就是层级的划分。 2. 操作步骤 (1)数据转化 转化前&#xf…

Backtrader 文档学习- Broker - Cheat-On-Open

Backtrader 文档学习- Broker - Cheat-On-Open 1.概述 V1.9.44.116增加了Cheat On Open的支持。对于全押的人来说,这似乎是一个必需的功能,用bar的收盘价后进行计算,希望与开盘价相匹配。 当开盘价差距(上涨或下跌,取…

streampark+flink一键整库或多表同步mysql到doris实战

streamparkflink一键整库或多表同步mysql到doris实战,此应用一旦推广起来,那么数据实时异构时,不仅可以减少对数据库的查询压力,还可以减少数据同步时的至少50%的成本,还可以减少30%的存储成本; streampar…

Vue.js 学习14 集成H265web.js播放器实现webpack自动化构建

Vue.js 学习14 集成H265web.js播放器实现webpack自动化构建 一、项目说明1. H265web.js 简介2. 准备环境 二、项目配置1. 下载 H265web.js2. 在vue项目里引入 H265web3. 设置 vue.config.js 三、代码引用1. 参照官方demo , 创建 executor.js2. 在 vue 页面里引用htm…

K8S网络

一、介绍 k8s不提供网络通信,提供了CNI接口(Container Network Interface,容器网络接口),由CNI插件实现完成。 1.1 Pod通信 1.1.1 同一节点Pod通信 Pod通过虚拟Ethernet接口对(Veth Pair)与外部通信,Veth…

有向图查询所有环,非递归

图&#xff1a; 有向图查询所有环&#xff0c;非递归&#xff1a; import java.util.*;public class CycleTest {private final int V; // 顶点数private final List<List<Integer>> adjList; // 邻接表public CycleTest(int vertices) {this.V vertices;this.…

C++ : 类的简单介绍(四)——析构函数

概念&#xff1a; 与构造函数功能相反&#xff0c;析构函数不是完成对对象本身的销毁&#xff0c;局部对象销毁工作是由 编译器完成的。 而对象在销毁时会自动调用析构函数&#xff0c;完成对象中资源的清理工作。 特征&#xff1a; 1. 析构函数名是在类名前加上字符 ~ 2. …

java+springboot电影订票选座及评论网站影评系统ssm+vue

广大观影消费者需要知道自己的空闲时间&#xff0c;在自己可以接受的地理距离范围内&#xff0c;是否有感兴趣的影片可供观看&#xff0c;也需要清楚哪家影院在销售自己需要的电影票&#xff1b;同时手握电影排期及上映信息的电影院的运营者也急需根据消费者的观影需求实时调整…

【笔记】CSDN文本编辑操作(持续更新中......)

文章目录 1、修改字体颜色和字号2、首行悬进两个字符3、图片居中4、字体、文字颜色、居中5、高亮6、重点标注7、加粗 1、修改字体颜色和字号 <html><head><meta http-equiv"Content" content"text/html;charsetutf-8" /><title>修…

互联网医院开发:未来医疗的新篇章

随着科技的飞速发展&#xff0c;互联网已经深入到我们生活的方方面面&#xff0c;而医疗领域也不例外。近年来&#xff0c;互联网医院的发展已经成为医疗行业的新趋势&#xff0c;为患者提供了更为便捷、高效的医疗服务。本文将探讨互联网医院开发的重要性、技术实现以及未来发…

王道_数据结构 1.2_2_算法的时间复杂度

1.2_2_算法的时间复杂度 一、为什么要事先预估算法时间开销二、时间复杂度的计算与技巧1、化简“算法时间开销”的计算方式的依据2、常用技巧&#xff08;1&#xff09;加法、乘法规则&#xff08;2&#xff09;时间复杂度的数量级阶数排行 3、计算时间复杂度的结论与步骤&…

TMC电池供电方案推荐

静音、小巧、精确、高效的构建模块改变了电机在电池供电设备中的使用方式。从恒温散热器阀&#xff0c;到现实捕捉设备和电动工具&#xff0c;再到医疗健康应用&#xff0c;激发丰沛想象力&#xff0c;将可靠概念运用于电池供电设备&#xff0c;为消费者和专业人士带来便利。 …

Klocwork 2023.4发布:问题匹配算法升级,编码标准全面支持!

Klocwork 2023.4 的新增功能 Klocwork 2023.4 改进了问题匹配的算法&#xff0c;为桌面端和CI集成构建之间的结果提供了更大的一致性&#xff0c;以及连续构建之间的问题匹配。Klocwork的最新版本还改进了C/C语言的分析引擎&#xff0c;减少了误报/漏报&#xff0c;跨过程跟踪…

C#,洛布数(Lobb Number)的计算方法与源代码

1 洛布数&#xff08;Lobb Number&#xff09; 在组合数学中&#xff0c;洛布数&#xff08;Lobb Number&#xff09;L(m&#xff0c;n)计算nm开括号的排列方式&#xff0c;以形成一个有效的平衡括号序列的开始。 Lobb数由两个非负整数m和n参数化&#xff0c;其中n>m>0。…

如何本地部署hMailServer邮件服务并实现远程发送邮件【内网穿透】

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&…

判断当前设备是不是安卓或者IOS?

代码(重要点): 当前文件要是 xxx.js文件,就需要写好代码后调用才会执行: // 判断是不是安卓 const isAndroid () > {return /android/.test(navigator.userAgent.toLowerCase()); }// 判断是不是ios const isIOS () > {return /iphone|ipad|ipod/.test(navigator.use…

《Pandas 简易速速上手小册》第1章:Pandas入门(2024 最新版)

文章目录 1.1 Pandas 简介1.1.1 基础知识1.1.2 案例&#xff1a;气候变化数据分析1.1.3 拓展案例一&#xff1a;金融市场分析1.1.4 拓展案例二&#xff1a;社交媒体情感分析 1.2 安装和配置 Pandas1.2.1 基础知识1.2.2 案例&#xff1a;个人财务管理1.2.3 拓展案例一&#xff1…

【IMAX6U移植OpenCV】

IMAX6U移植OpenCV V1.3 一 安装通用交叉编译器1.1 下载通用交叉编译器1.2 安装通用交叉编译器1.3 验证通用交叉编译器 二 搭建 OpenCV 3.4.1 的编译环境2.1 下载 OpenCV 3.4.1 源码2.2 配置 OpenCV 环境2.3 编译 OpenCV 源码 三 Qt 项目中加入OpenCV3.1 Qt 项目的 pro 文件Open…

【Spark系列1】DAG中Stage和Task的划分全流程

一、整体流程 每个Aciton操作会创建一个JOB&#xff0c;JOB会提交给DAGScheduler&#xff0c;DAGScheduler根据RDD依赖的关系划分为多个Stage&#xff0c;每个Stage又会创建多个TaskSet&#xff0c;每个TaskSet包含多个Task&#xff0c;这个Task就是每个分区的并行计算的任务。…

数灵通外链工具如何实现回传功能?

在数字营销的世界里&#xff0c;了解用户行为是至关重要的。数灵通提供了一个强大的回传功能&#xff0c;能够让我们在用户完成某个动作后&#xff0c;获取到这个动作的数据反馈。利用这个功能&#xff0c;企业可以更好地了解用户需求和行为&#xff0c;从而优化营销策略&#…