【总结】游戏框架与架构设计(Unity为例)

使用框架开发游戏

优点:耦合性低,重用性高,部署快,可维护性高,方便管理。提高开发效率,降低开发难度

缺点:增加了系统结构和实现的复杂性,需要额外花费精力维护,不适合小型程序,易影响运行效率

 

常见框架

MVC 

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

我的SFramework中,View层是单独的,Model我放在基类中,Controller则在派生类,实现了MVC的分离(如果要重构的话我可能会用组合代替继承)

举例: PlayerHUD+PlayerCtrl(PlayerYuka)+IPlayer

注意图中的调用关系

MVC

优点:实现了层次化设计,是一个基础常用的框架

缺点:MVC如果没有用好,容易出现某一层过重的现象(如View)。MVC更适合横向铺量的项目。游戏(非UI部分)则不太合适。

MVVM

MVVM 模式将MVP中的 Presenter 改名为 ViewModel,基本上与 MVP 模式完全一致。

MVP中,View 与 Model 不发生联系,都通过 Presenter 传递。

唯一的区别是,它采用双向绑定(data-binding):View的变动,自动反映在 ViewModel

SFramework中,View不能直接修改Model,他们之间通过事件通信

uFrame&MVVM

uFrame框架模仿了MVVM这种架构模式(事实上并不包含Model部分,且多出了Controller部分)

在uFrame中,使用Element这个概念将业务分拆成三部分:

  • ViewModel:保存游戏中对象的数据结构,例如血量、经验、金钱等等。
  • Controller:处理游戏业务逻辑。例如加血、减血之类的。
  • View:游戏世界中可以见的对象,和ViewModel绑定,以在游戏中进行展现。

uFrame是可视化的,功能似乎方便实用,但是由于收费,我没有深入过,不便过多评价

PureMVC

pureMVC框架引入了多种设计模式、消息机制(使用观察者模式,发布/订阅模式)来解耦各个模块

我曾使用过PureMVC框架开发过一个demo,它通过ApplicationFacade,Mediator,Proxy,Command架设项目,由SendNotification()进行交互

优点:强解耦,实现了MVC高度分离

缺点:增加代码量,降低执行效率,函数调用层次较深,容易找不到消息发送源。Facade作为单例接口,本应管理MVC,Model、View、Controller却提供了 getInstance()方法,让人奇怪

MVCS

框架与架构

StrangeIOC支持依赖注入(即控制反转(Inversion of Control,缩写为IoC)),可以有效降低耦合度

但是IOC复杂而缓慢,而且是基于Mono的,所以我没有选用

ECS

Entity Component System

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

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

ECS的教程现在还比较少,详细的我也不方便介绍了,感兴趣的可以在这些框架中选一个深入

其他

TRAP框架

TRAP是一个学长制作的单机游戏,他在这个游戏中使用了自己原创的框架,SFramework也从中参考了不少设计思路。TRAP有分UI部分和游戏部分,封装了Unity事件和输入控制,使用单例、Manager和NotificationCenter进行消息传输,不过目前未开源

GameFramework

基于 Unity 5.3+ 引擎的游戏框架,国人原创,开源

详情可以去官网查看 简介

还有更多优秀框架可以在GitHub中找到~

原文地址:https://www.cnblogs.com/sols/p/8455279.html

时间: 2024-08-28 21:29:04

【总结】游戏框架与架构设计(Unity为例)的相关文章

阿里游戏高可用架构设计实践

今天读了李云华老师写的<阿里游戏高可用架构设计实践 >,有一些感受想分享一下. 印象很深的一句话那就是他最开始说的“把韵味的锅让研发去背!”也就是说,高可用的系统是设计出来的,不是靠运维保障出来的! 他提到出现问题人们的思考顺序为:首先想到的是不是运维太LOW了,比如说硬件质量太差,为什么这个月机柜也坏.交换机也坏,是不是到电脑城买个二手货放里面了?第二想到的是不是运气不好,之前一个月.两个月才遇到一次,这个月遇到了4次,是不是你们没有在机房烧香?第三个是不是测试不足,为什么这些Bug测试阶段

游戏引擎介绍,架构,设计及实现

本文的灵感来自于<Android应用开发揭秘>的游戏引擎的那一章. 关于Game Engine,我能想到的几个问题: 1.游戏引擎是什么? 2.Game Engine是为了解决什么问题? 3.Game Engine的架构是什么? 4.如何设计一款游戏引擎? 5.游戏引擎包含哪些模块? 下面就来探讨几个问题:  1. Game Engine是什么? 游戏产业在全球来看是一个很大的产业,一款游戏大作包含了非常多的元素.游戏涉及到剧情.人物.任务.关卡.地图.画质.美术.音乐.网络等多种元素.开发一

zsy框架-架构设计

Zsy框架总体架构设计 1.Mysql数据库,存储所有表的数据. 2.Zsy-基础项目(Zsy-Model,Zsy-Dao,Zsy-Service,Zsy-Web),基于SSM框架.项目功能包含基本的人员信息,角色信息,权限功能等. 3.Zsy-高级项目(Zsy-High),继承Zsy-基础项目.项目功能包含人脸识别,流程引擎,定时任务,代码生成等. 4.Zsy-应用项目(Zsy-Crm),继承Zsy-基础项目和Zsy-高级项目.自定义项目的所需功能. 5.Zsy-Vue (Zsy-Vue),

iOS移动架构设计

---恢复内容开始--- 1.项目架构搭建 2.多媒体框架 iOS音频框架  iOS视频框架 聊天架构设计 3.推送架构设计 (推送原理实现服务器端.推送原理实现客户端) 4.DI架构 5.IOC架构 6.ORM数据库架构 7.Http网络请求框架 8.列表缓存架构 9.图片缓存架构 10.聊天架构设计 (客户端  服务器端) 11.推送架构设计  推送原理实现服务器端 推送原理实现客户端 ---恢复内容结束---

iOS移动架构设计FWZ

1.项目架构搭建 2.多媒体框架 iOS音频框架  iOS视频框架 聊天架构设计 3.推送架构设计 (推送原理实现服务器端.推送原理实现客户端) 4.DI架构 5.IOC架构 6.ORM数据库架构 7.Http网络请求框架 8.列表缓存架构 9.图片缓存架构 10.聊天架构设计 (客户端  服务器端) 11.推送架构设计  推送原理实现服务器端 推送原理实现客户端

HRMS(人力资源管理系统)-SaaS架构设计-概要设计实践

一.开篇 前期我们针对架构准备阶段及需求分析这块我们写了2篇内容<HRMS(人力资源管理系统)-从单机应用到SaaS应用-架构分析(功能性.非功能性.关键约束)-上篇><HRMS(人力资源管理系统)-从单机应用到SaaS应用-架构分析(功能性.非功能性.关键约束)-下篇>内容来展开说明. 本篇主将详细的阐述架构设计过程中概要架构设计要点来和大家共同交流,掌握后续如何强化概要架构设计在架构设计中作用,帮助我们快速确认架构的方向及核心大框架. 在阐述具体的概要架构工作方法之前,还请大家

Unity游戏框架设计

1.单例模式 模块间的脚本,向上一层层的封装,只能通过Manager进行传递. 缺点: 可移植性很差 层级关系复杂 每一个游戏框架都不一样 2.PURMVC: 通过消息处理中心,进行脚本间的交流       耦合性变弱,容易移植 缺点: 封装层级很多                  遵守很多的接口,进行脚本间的通讯 关系比较复杂 3.mvc和单例混合模式 1.条理清晰 代码组织明确 2.移植性高 代码利用率高 3.程序交流方便 4.资源和程序分开 容易管理 5.Lua也遵循该模式

简单Unity时间架构设计(克洛诺斯之匙)

简单Unity时间架构设计(克洛诺斯之匙) 好吧,这次的题目有点标题党之嫌,提出这个设计,是因为最近玩了鬼泣,其中有一个关卡叫做“为了自己的主人”,任务中,需要利用克洛诺斯之匙将时间变慢,便于通过激光镇. 使用克洛诺斯之匙之后,主角的行动是正常的,运走,攻击等等.而其他的如怪物,死亡特效等对象的更新都变慢了.当时我想,如何让不同的对象能够按不同频率更新呢? 在unity中,脚本按时更新的是Time.FixedUpdate,改变其速率只需要修改Time.timeScale就行了.然而这么做非常“鲁

小梅科普:Unity客户端架构设计与网络游戏关键技术

目前利用Unity开发移动端游戏越来越多,不论是游戏公司还是独立开发者都需要在移动互联网时代发挥各自的技术优势,把自己的产品做到最好占领市场.本课程介绍的是基于Unity客户端框架设计以及关键技术3DAvatar换装和热更新技术实现以及Protobuf-net序列化和反序列化的运用,只有掌握了Unity开发的关键技术才能将其运用在游戏开发中,对于快速的开发游戏占领市场至关重要. 本课程以此项目的开发为讲解内容,以目前游戏开发的关键技术为依据,由浅入深循序渐进进行介绍,绝大部分的代码的编写都有相应