【unity】MVC

前言

MVC是非常经典的分层设计,是时候记录下来了。

什么是MVC

MVC是Xerox PARC在二十世纪八十年代为编程语言Smalltalk-80设计的一种软件框架模式,其中定义了Model-View-Controller三层,这三层分别具有特定职能,使得开发过程变得可控。现已被广泛使用。

MVC的结构

Model

Model的作用是存储游戏对象的核心数据和状态,处理一切数据逻辑。它不直接和View层交互,一般借由事件来分发消息。

View

View的作用是从Model层查询数据状态,并即时更新游戏UI。一般来说就是UI层。

Controller

Controller的作用是接受用户的输入,并把对应命令转递给Model或View,让它们执行对应操作。简单来说,C把各种M和各种V联系起来。

MVC解决了什么问题

显然,它做到了数据和显示的解耦。这是事件驱动的功劳,现在主流的游戏UI更新方式就是事件驱动。

在早期的软件开发中,一份数据要以不同的方式展现出来,即一个M(数据),多种V(展示),很适用于MVC。

MVC的改进方案

PureMVC是一款新式的MVC框架。在传统的MVC框架上,它新增了Proxy、Mediator和Command来辅助MVC三层进行工作。

image

详情指路->PureMVC--一款多平台MVC框架

针对Unity的MVC改进方案

Unity With MVC: How to Level Up Your Game Development中提到了他对通用MVC框架的改进,以更好地适应游戏开发的需求:

现在,我想介绍一下对通用 MVC 模式的两个小修改,这有助于它适应我在使用 MVC 构建 Unity 项目时遇到的独特情况:

MVC 类引用很容易分散在整个代码中。 - 在 Unity 中,开发人员通常必须拖放实例以使其可访问,或者通过繁琐的查找语句访问它们。 - 如果 Unity 崩溃或某些错误使所有拖动的引用消失,则丢失引用地狱将随之而来。 - 这使得必须具有单个根引用对象,通过该对象可以访问和恢复应用程序中的所有实例。GetComponent( ... )
某些元素封装了应高度可重用的常规功能,并且通常不属于模型、视图或控制器的三个主要类别之一。我喜欢简单地称这些为组件。它们也是实体组件意义上的“组件”,但只是充当 MVC 框架中的帮助程序。 - 例如,aComponent,它只按给定的角速度旋转事物,并且不通知,存储或决定任何东西。Rotator
为了帮助缓解这两个问题,我想出了一个修改后的模式,我称之为AMVCC,或应用程序-模型-视图-控制器-组件。

image

想深入了解可以去原博客查看。

非合理不使用

MVC对于响应式交互的UI系统有优势;但对于游戏的其他模块来说,使用MVC可能并不合理。

不同于需求相对固定的其他前端开发,游戏开发的需求复杂多变,开发时根据项目的实际需求来改造或制定框架才是合理的。不要为了用框架而生搬硬套。

参考资料

Unity With MVC: How to Level Up Your Game Development
PureMVC--一款多平台MVC框架
探讨:为什么在游戏开发中不使用MVC?

posted @ 2022-11-02 18:26  AshScops  阅读(263)  评论(0编辑  收藏  举报