【GameFramework框架】一、框架介绍

news2024/9/21 4:33:11

推荐阅读

  • 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.coloradmin.cn/o/1424334.html

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

相关文章

Flink 读取 Kafka 消息写入 Hudi 表无报错但没有写入任何记录的解决方法

博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,京东购书链接:https://item.jd.com/12677623.html,扫描左侧二维…

node,node-sass,sass-loader之间的版本关系

前言 安装配置node-sass 以及 sass-loader想必是很多前端的噩梦–一不小心又不成功还得装个半天。 下面说一下这个问题。 当然,你肯定遇到过: Node Sass version 9.0.0 is incompatible with ^4.0.0-这样的问题,这个也是因为三者关系对不上…

【HTML 基础】表单标签

文章目录 1. <form>2. <input>3. <select> 和 <option>4. <textarea>5. <button>结语 HTML 表单是互联网上交互性最强的元素之一&#xff0c;它允许用户输入、选择和提交数据。在这篇博客中&#xff0c;我们将介绍 HTML 中一些关键的表单标…

手把手教你写架构(java)篇

领取资源在文章末尾。 架构部分&#xff1a; 1. 分层架构&#xff08;Layered Architecture&#xff09;&#xff1a;将应用程序分解为多个逻辑层&#xff0c;每个层都有明确的职责。常见的分层包括表示层&#xff08;Presentation Layer&#xff09;、业务逻辑层&#xff08…

torchvision.models._utils.IntermediateLayerGetter()使用

torchvision.models._utils.IntermediateLayerGetter&#xff08;&#xff09;使用 源码如下&#xff1a; from collections import OrderedDictimport torch from torch import nnclass IntermediateLayerGetter(nn.ModuleDict):"""Module wrapper that ret…

电脑配置在哪里看?别错过这四个方法

在使用电脑的日常操作中&#xff0c;了解电脑的硬件和软件配置是解决问题、优化性能以及购买新硬件的关键。然而&#xff0c;对于一些用户来说&#xff0c;查看电脑配置可能是一个看似复杂的任务。幸运的是&#xff0c;有多种简便而直观的方法&#xff0c;让您能够轻松获取电脑…

【python】在python中使用单元测试unittest

在python中使用单元测试unittest 大家好&#xff0c;欢迎来到我的技术乐园&#xff01;今天&#xff0c;我们将一起踏入Python单元测试的奇妙旅程&#xff0c;探索这个让我们的代码更可靠、更强壮的令人愉快的世界。 前言&#xff1a;为什么单元测试如此重要&#xff1f; 在我…

如何访问 Oracle OKE 集群

OKE是Oracle Cloud提供的托管Kubernetes服务&#xff0c;为用户提供强大而灵活的容器编排平台。在本文中&#xff0c;我们将详细介绍如何有效地与OKE集群进行交互&#xff0c;包括访问集群的不同方式、管理访问权限以及执行常见操作的步骤。 1 安装oci命令 1.1 在Oracle Linux…

智慧城市行业盛会:2024北京国际智慧城市展览会(世亚智博会)

随着科技的飞速进步和人们生活水平的不断提高&#xff0c;智慧城市建设已经逐渐成为当今社会的重要议题。为了展示和推广国内外数字技术与新应用成果&#xff0c;引领数字产业发展新方向&#xff0c;积极推动5G、人工智能、大数据、云计算、物联网、移动互联网、元宇宙等新型数…

Java编程练习之类的封装

1.把一个Student类封装起来&#xff0c;模拟一个转校生转入新学校后为其制作学生信息的过程。运行结果如下&#xff1a; package zhtestdemo; import java.util.Scanner; import java.text.DecimalFormat; public class demo { //创建类&#xff0c;类名叫demo; private Stud…

Transformer 自然语言处理(二)

原文&#xff1a;Natural Language Processing with Transformers 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第五章&#xff1a;文本生成 基于 Transformer 的语言模型最令人不安的特点之一是它们生成的文本几乎无法与人类写的文本区分开。一个著名的例子是 Ope…

二、人工智能之提示工程(Prompt Engineering)

黑8说 岁月如流水匆匆过&#xff0c;哭一哭笑一笑不用说。 黑8自那次和主任谈话后&#xff0c;对这个“妖怪”继续研究&#xff0c;开始学习OpenAI API&#xff01;关注到了提示工程(Prompt Engineering)的重要性&#xff0c;它包括明确的角色定义、自然语言理解&#xff08;…

VSCode 设置代理

Open Visual Studio Code, click the settings icon in the lower left corner, and click Settings.

pysyft框架中WebsocketClientWorker与WebsocketServerWorker的消息传输

引言 pysyft是基于pytorch的一个联邦学习框架&#xff08;虽然用起来很难受&#xff09;&#xff0c;通过内存管理实现联邦学习的模拟。 在pysyft中&#xff0c;WebsocketServerWorker充当数据的提供方&#xff08;数据存储方&#xff09;&#xff0c;而WebsocketClientWorker…

RocketMQ—RocketMQ安装

RocketMQ—RocketMQ安装 在安装RocketMQ之前需要先安装Jdk&#xff0c;并配置JAVA_HOME环境变量。 在安装之前我们要先下载RocketMQ的安装包。 下载 到RocketMQ的官网https://rocketmq.apache.org/ 选择Download。 本文使用4.9.2版本。 将下载页面拉到最后面&#xff0c;有…

推荐系统|排序_MMOE

MMOE MMOE是指Multi-gate Mixture-of-Experts 注意看Expert后面加了s&#xff0c;说明了有多个专家。 而在MMOE中专家是指用来对输入特征计算的神经网络&#xff0c;每个神经网络根据输入计算出来的向量都会有所不同。 MMOE的低层 MMOE的上一层 通过MMOE的低层算出的向量和权…

Zookeeper分布式队列实战

目录 Zookeeper分布式队列 普通方式实现 设计思路 具体实现 使用Curator实现 具体实现 注意事项 Zookeeper分布式队列 常见的消息队列有:RabbitMQ&#xff0c;RocketMQ&#xff0c;Kafka等。Zookeeper作为一个分布式的小文件管理系统&#xff0c;同样能实现简单的队列功…

使用Markdown写作的魔力

今年的年终总结报告,我是用Markdown写的,只花了大概2.5天的时间,包括统计任务数据,时效,总结成果,挖掘不足,提出改善措施和计划。 将全部文字内容的.md文档,导出为word,然后用了做PPT的AI,设计了PPT,再修改了半天,就完成了。 上周为两个代码工程,用Markdown写了r…

Kubernetes operator(五)api 和 apimachinery 篇【更新中】

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 Kubernetes operator学习 系列第五篇&#xff0c;主要对 k8s.io/api 和 k8s.io/apimachinery 两个项目 进行学习Kubernetes operator学习系列 快捷链接 Kubernetes operator&#xff08;一&#xff09;client-g…

PyCharm / DataSpell 导入WSL2 解析器,实现GPU加速

PyCharm / DataSpell 导入WSL2 解析器的实现 Windows的解析器不好么&#xff1f;设置WSL2和实现GPU加速为PyCharm / DataSpell 设置WSL解析器设置Interpreter Windows的解析器不好么&#xff1f; Windows上的解析器的确很方便&#xff0c;也省去了我们很多的麻烦。但是WSL2的解…