Unity中的MVC框架
1.MVC的概念
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中,数据-控制-显示分离的工作方式会使游戏(软件)的结构清晰化,逻辑更明了。
Model
负责数据的处理、能被Controller更新。
(1) 不保存任何View的数据或者View的状态
(2) 只能被Controller或者其他Model访问
(3) 会触发事件来通知外部系统进行处理和变更
View
在屏幕上渲染的视图,和用户交互的界面。
(1) 处理用户绘制元素的reference,包括纹理,特效等
(2) 播放动画
(3) 布局
(4) 接受用户输入
Controller
Controller是连接Model和View的桥梁。它会保存View的状态,并且根据外部事件来更新View的状态。
(1) 持有View所需要的应用状态
(2) 控制View的流程
(3) 根据状态show/hides/activates/deactivates/updates View或者View的某些部分。如controller可临时将攻击按钮Distable掉,因为此时攻击处于冷却状态,冷却状态一过,controller会re-enable这个按钮
(4) load/Instantiate需要的assets,比如显示particles, 动态改变sprites等
(5) 处理用户在View中触发的事件,比如用户按下了一个按钮;处理Model触发的事件,比如player获得了 XP并触发了升级,所以controller就更新了View中的Level Number
2.MVC的优势
多个视图能共享一个模型。同一个模型可以被不同的视图重用,大大提高了代码的可重用性。
由于MVC的三个模块相互独立,改变其中一个不会影响其他两个,所以依据这种设计思想能构造良好的松耦合的构件。
控制器提高了应用程序的灵活性和可配置性。控制器可以用来联接不同的模型和视图去完成用户的需求,这样控制器可以为构造应用程序提供强有力的手段。
不过,由于实际游戏开发中不同游戏的核心逻辑可能差异较大,MVC框架并不适合游戏开发的每个过程,而多用于UI的开发。
3.MVC框架实例
//实现通过MVC框架随机产生一名幸运儿并显示至面板上的功能
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public struct PlayerModel {
public string name;
public int age;
public int id;
}
public class GameModel : MonoBehaviour
{