游戏项目中MVC模式的应用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DdogYuan/article/details/82706297

MVC模式

MVC模式概述

MVC是(Model、View、Controller)三个单词的首字母简写,其应用的目的是为了将程序分层,便于应用程序的分层开发。

  1. Model (模型)代表一个存储数据的对象,它也可以带有少量的逻辑,在数据有变化的时候通知Controller进行更新视图
  2. View(视图)代表模型包含的数据的可视化表现
  3. Controller(控制器)控制器控制数据流向模型对象,并在数据变化时更新视图。它使得视图于模型分离开。
    图1

Unity游戏项目中的MVC模式

以一个MMORPG背包系统为例,玩家可以在游戏主界面按背包按钮打开背包,背包中的数据来源于服务器,背包有自动整理、显示物品信息等等交互功能。我们用英文Pack来代表背包,应用于相应的Model、View、Controller类的命名。

View

将面板PackView制作成Prefab,面板PackView的GameObject挂载PackView.cs,在PackView.cs中获取各个面板组件的引用,例如该面板的一些按钮,并在PackView.cs中定义这些按钮的回调函数(例如背包系统中子面板的呼出)

Model

PackModel的初始化

PackModel类使用单例模式(针对MMORPG游戏特性,每个玩家客户端只维护该玩家的背包数据)。

PackModel职责

在PackModel中定义玩家持有物品的列表的数据存储结构、对数据操纵的函数以及向PackView传入数据更新表现等等。
向PackView传入数据的方式不止一种,例如

  1. PackModel存放PackView的引用
  2. PackModel发送被PackView监听的消息类型

Controller

PackController的初始化

对于MMORPG来说,一般在游戏初始化的时候实例化不同模块的Controller类,背包系统作为一个模块,其Controller类也是在游戏初始化的时候被实例化。

PackController的职责

Controller类负责的是控制数据流流向模型对象,其中数据流来自游戏服务器。同时,Controller也是由User进行更新的,它也处理玩家的交互事件,例如点击背包按钮将背包面板调出。
故Controller会持有View和Model的引用,同时会注册网络协议回调事件将网络数据更新至Model中,并注册玩家的点击事件回调事件,需要注意的是,虽然Controller持有View的引用,但是个人觉得不应该由Controller来更新View,因为View所需要的数据只有Model知道,所以觉得应该由Model来驱动View更新其表现会比较好。

猜你喜欢

转载自blog.csdn.net/DdogYuan/article/details/82706297
今日推荐