Unity GameFramework框架理论解析与应用实践

本专栏是 Unity 生态中热门的 GameFramework 框架系统性学习合集,专为解决开发者 “框架上手难、源码看不懂、项目不会用” 三大痛点打造。内容涵盖框架核心功能快速应用(模块配置、资源管理、UI 框架、事件系统等)、详细使用说明(场景适配、性能优化、跨平台兼容)、深度源码分析(核心逻辑拆解、设计模式解读),并结合 VR 游戏、虚拟仿真教育真实项目案例,让你从 “会用” 到 “精通”,真正掌握框架的底层逻辑与实战技巧。每篇文章都包含实操步骤、代码示例、问题解决方案,零基础也能快速跟上,资深开发者可直击核心源码,提升技术深度。

 

张尧:CSDN博客专家、Unity3D领域优质创作者、《Unity 3D从入门到实战》作者

先后任职于北京界源科技(VR 游戏开发)、郑州某公司(开发负责人),深耕 VR、虚拟仿真教育领域,主导多款商业项目从 0 到 1 落地。同时获得 CSDN 博客专家、Unity3D 领域优质创作者头衔,以及华为云云享专家、阿里云社区专家、腾讯云专家博主,累计输出百万字技术干货,帮助数万开发者少走弯路。


目录

1|框架介绍

2|GameFramework框架介绍

3|快速启动

4|GameFramework框架内置模块

4-1|全局配置(Config)

4-2|数据节点(Data Node)

4-3|数据表(Data Table)

4-4|内置模块之调试器(Debugger)

4-5|下载(Download)

4-6|实体(Entity)

4-7|事件(Event)

4-8|文件系统(File System)

4-9|有限状态机(FSM)

4-10|本地化(Localization)

4-11|网络(Network)

4-12|对象池(Object Pool)

更新中...


本篇转载自《Unity GameFramework框架理论解析与应用实践》的第1节。

 

1.1 前言

这是GameFramework框架教程的第一篇,但是博主不准备直接就讲GameFramework框架。

博主准备从框架开始说起,讲讲框架的“前世今生”,心急的小伙伴可以直接跳转到下一篇:GameFramework框架介绍。


1.2 框架(Framework)介绍

1. 框架(Framework)是什么

框架(Framework)通常被理解为一种基础要素的集合,它们用于承载系统的必要功能。

在不同的技术和领域中,如IT和软件开发,框架具有特定的意义和作用:

  • 约束性:框架定义了解决特定问题的边界,并将相关的软件组件约束在这个范围内,以保持框架的内聚性和解决问题的专注性。
  • 支撑性:框架本身不直接解决问题,而是提供一个基础的支撑结构,使得在其上构建的解决方案更为灵活和高效。框架通常会包括一系列的约定、配置和工具,这些辅助性工具帮助开发者简化复杂任务,提高开发效率。

框架可以被视为一种未完成的半成品,需要在使用时赋予它具体的业务含义。

常见的例子包括模型-视图-控制器(MVC)、WPF等,它们包含了对特定问题的解决方法的设计模式,以及一系列的工具和库,以便于开发者快速搭建和维护应用。

综上所述,框架是一种设计模式,旨在通过预定义的结构和规则来简化复杂系统的开发过程,同时确保系统的稳定性和可扩展性。

PS:上面的内容摘录自百度。

刚开始接触框架的同学是不是感觉已经有点懵了,这里我再用一个简单的例子给大家解释一下框架:

小明早上出门要去出差,他会在自己的包里放入:牙膏、牙刷、毛巾、充电器、充电宝、纸巾、湿巾、U盘、钥匙等等。

小明要取钥匙,然后就在包里翻了半天,最后把东西全部倒出来,才找到了钥匙。

后来,小明找了一个女朋友小红,小红总是会在小明出门前将小明的包里面的东西整理一下:

充电器、充电宝、钥匙、纸巾、湿巾等常用的放在最外侧的兜里;

U盘小玩意放到内侧小兜里;

牙膏、牙刷、毛巾放到内包里。

这样,小明要找钥匙的时候,直接去外侧找,一下就找到了钥匙。

这个例子呢,就很生动了说明了框架是什么。

框架就是在架构内构建了一套固定流程,开发人员按照这个流程,以及条条框框进行开发,知道自己的函数写在那里,如何架构,会快速找到自己想要的东西,以此来提高开发效率。

框架指的是在某些应用领域具有通用的完备功能的底层服务,使用框架的编程人员可以在一个通用的实现的基础上开始具体的系统开发。框架提供了抽象的默认行为类集合,具体的实现可以通过重写子类或组装对象来支持应用特有的功能模块。

 

2. 为什么用框架(Framework)

简单说就是提高工作效率。

框架是一个可复用的设计构件,规定了应用的体系结构,设计了协作构件之间的依赖关系、责任分配和流程控制,表现为一组抽象类以及其实例之间的协作的方法。

作为一名程序员,在开发过程中会发现,有框架和没有框架开发起来效率差距有多大。

一个好的框架可以带来更快的开发效率、提高程序的健壮性和鲁棒性、提高程序的性能、提高团队协作、方便后续功能维护和拓展等。

 

3. 怎么用框架(Framework)

使用框架的话可以先找一些框架的文档、教程等东西先学习。

然后找一些案例进行学习,使用框架的功能,有不清楚的地方再回头仔细看这部分额文档。

当对于某个框架用的比较熟悉的时候,就可以分析框架的原理和实现过程,以及功能为什么这么设计。再用来优化之前的项目。

当然,更进一步的话,可以学习源码,为框架做贡献。

 

4. 怎么设计框架(Framework)

框架与具体功能的实现不一样,框架强调的是软件的设计重用性和可拓展性。

好的框架是相对的,它有自己特定的应用领域,合适的才是最好的。

比如你做虚仿项目使用一个游戏框架,里面的网络通信、帧同步、战斗模块你可能永远都用不上,这不就有点浪费了嘛。

言归正传,设计框架,需要在实际开发中的具体情况来看,细想架构需要分三层还是五层,每个层之间如何解耦,要用什么设计模式。

当然,设计框架的目的还是效率,一些不常用的功能可以在写的时候留下拓展方案或思路,在以后实际用上的时候再添加上,慢慢升级框架。

还可以在使用过程中提高能力和积累经验,将学习到的新技术新知识融合到框架中,使得框架更加强大,更加健壮。

框架通过小步快跑,不断迭代升级来慢慢拓展,当项目应用框架后,再根据新需求和碰到的问题去调整,让框架更加强大。

设计框架的时候有以下几个要求:

1. 代码模板化

框架一般都有统一的代码风格,同一分层的不同类代码,都是大同小异的模板化结构,方便使用模板工具统一生成,减少大量重复代码的编写。在学习时通常只要理解某一层有代表性的一个类,就等于了解了同一层的其他大部分类结构和功能,容易上手。团队中不同的人员采用类同的调用风格进行编码,很大程度提高了代码的可读性,方便维护与管理。

2. 重用

开发框架一般层次清晰,不同开发人员开发时都会根据具体功能放到相同的位置,加上配合相应的开发文档,代码重用会非常高,想要调用什么功能直接进对应的位置去查找相关函数,而不是每个开发人员各自编写一套相同的方法。

3. 高内聚(封装)

框架中的功能会实现高内聚,开发人员将各种需要的功能封装在不同的层中,给大家调用,而大家在调用时不需要清楚这些方法里面是如果实现的,只需要关注输出的结果是否是自己想要的就可以了。

4. 规范

框架开发时,必须根据严格执行代码开发规范要求,做好命名、注释、架构分层、编码、文档编写等规范要求。因为你开发出来的框架并不一定只有你自己在用,要让别人更加容易理解与掌握,这些内容是非常重要的。

5. 可扩展

开发框架时必须要考虑可扩展性,当业务逻辑更加复杂、数量记录量爆增、并发量增大时,能否通过一些小的调整就能适应?还是需要将整个框架推倒重新开发?当然对于中小型项目框架,也不必考虑太多这些内容,当个人能力和经验足够时水到渠成,自然就会注意到很多开发细节。

6. 可维护

成熟的框架,对于二次开发或现有功能的维护来说,操作上应该都是非常方便的。比如项目要添加、修改或删除一个字段或相关功能,只需要简单的操作,十来分钟或不用花太多的工夫就可以搞定。新增一个数据表和对应的功能,也可以快速的完成。功能的变动修改,不会对系统产生不利的影响。代码不存在硬编码等等,保证软件开发的生产效率和质量。

7. 协作开发

有了开发框架,我们才能组织大大小小的团队更好地进行协作开发,成熟的框架将大大减轻项目开发的难度,加快开发速度,降低开发费用,减轻维护难度。

8. 通用性

同一行业或领域的框架,功能都是大同小异的,不用做太大的改动就可以应用到类似的项目中。在框架中,我们一般都会实现一些同质化的基础功能,比如权限管理、角色管理、菜单管理、日志管理、异常处理......或该行业中所要使用到的通用功能,使框架能应用到某一行业或领域中,而不是只针对某公司某业务而设定(当然也肯定存在那些特定功能的应用框架,这只是非常少的特殊情况,不在我们的考虑范围)。

 

5. 常用的Unity 3D框架(Framework)

5.1、MVC框架

基础常用的框架

  • 表现层(View):游戏画面,UI
  • 逻辑层(Controller):数据接口,操作控制,AI
  • 数据层(Model):数据保存,图片、声音等资源

 

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。

 

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的新特性糅合进去,以应对客户日益复杂的需求变化。

 

5.4 PureMVC框架

最核心的三个层:Model,View,Controller。

PureMVC在传统MVC基础上做了许多的改进,通过结合多个“设计模式”的应用,让耦合性变得更低,也变得更加地易用,在扩展性、灵活性、重用性方面也做得更好。

设计模式的存在,其实很重要的一个职责就是解决耦合性。PureMVC用到的这些设计模式,贯穿了整个游戏框架,即便你项目中使用的不是MVC框架,你都离不开这些设计模式的应用,下面是PureMVC中使用到的设计模式:

1. 代理设计模式

2. 中介者设计模式

3. 外观设计模式

4. 观察者设计模式

5. 命令设计模式

6. 单例设计模式

 

5.5 MVCS框架

StrangeIOC中所指MVCS的“S”,为服务(程序外部的服务例如:Web服务)。

StrangeIoc是依据控制反转和解耦原理设计的,支持依赖注入。

控制反转即Ioc(Inversion of Control),它把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理。所为的“控制反转”概念就是对组件对象控制权的转移,从程序代码本身转移到了内部的容器。

依赖注入(Dependency Injection)的基本原则是:应用组件不应该负责查找资源或者其他依赖的写作对象。配置对象的工作应该由Ioc容器负责。

 

5.6 ECS框架

Unity本身的组件开发就是ECS框架,ECS很适合游戏开发,在游戏引擎中比较常见,谷歌曾在Github上发布了一个名叫Entitas的ECS框架,下面我们就来介绍:

  • Entity就是只有数据的GameObject对象,不包括方法;
  • 每一个Entity拥有Component组件,负责Entity数据处理;
  • Group是拥有相同Component的Entity集合;
  • Context就是创建销毁Entity的工厂;
  • Collector收集器提供了简单的方法来处理Group中Entity变化的反应。

 

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插件中。

 

5.8 SFramework游戏框架

Sunset Game制作组自主设计研发的一款Unity通用游戏框架,设计思想类似MVC+ECS。

  • 不限于3D-ARPG游戏的万能框架Unity-Framework
  • 独立设计开发的原创游戏框架,持续更新中
  • 控制游戏生命周期,框架尽量不继承Monobehavior
  • 基于单例模式,外观模式,桥接模式等设计模式
  • 可使用PhysX物理引擎,动画帧事件等基于Monobehavior的功能
  • 代码追求精简高效,核心代码仅5000+行

以上就是《Unity GameFramework框架理论解析与应用实践》的第1节,此篇文章比较适合想快速掌握成熟框架,提升项目开发效率的Unity 初学者 / 进阶者;需要针对性解决框架在特定场景的应用问题的VR / 虚拟仿真教育领域开发者;希望通过源码分析提升技术深度,解决实际项目难点的在职 Unity 工程师;想了解框架架构设计,用于团队技术选型与项目落地的技术负责人 / 项目管理者;以及对 Unity 框架开发、游戏引擎架构感兴趣,寻求系统性学习路径的编程学习者

读完全篇后你会获得:

1、快速上手能力:掌握 GameFramework 框架核心模块使用方法,1 小时搭建基础项目架构;

2、源码解读思维:看透框架底层实现逻辑,理解设计模式在实际开发中的应用;

3、实战落地经验:获取 VR 游戏、虚拟仿真教育项目中框架的适配技巧与性能优化方案;

4、问题解决工具库:覆盖框架使用中 90% 的常见问题(资源加载异常、UI 层级冲突、跨平台兼容等)及解决方案;

5、技术背书加成:掌握主流框架技能,提升求职、晋升竞争力(适配 Unity 开发、VR / 虚拟仿真相关岗位需求);

6、持续更新权益:专栏将同步框架版本迭代,新增功能解析与实战案例,终身免费查看。

posted @ 2025-11-28 16:09  UWATech  阅读(0)  评论(0)    收藏  举报