在Unity使用PureMVC
1.动机
由于在topameng的cstolua框架中使用到了PureMVC框架,本人初学热更新时便感到了一头雾水,因此又特地的了解学习了PureMVC框架。
2.导入PureMVC框架
首先要说一些PureMVC的来历,这是一个开源框架最初只是用于as3语言,但是现在已经几乎移植到所有的发展平台,分为单核和多核,我们要使用的是客户端所使用的单核。这里提供一个现成的下载地址,下载后直接拖入unity工程目录下就可以使用。
3.流程
Command接受玩家的输入(或者视图层发来的输入消息)
---------------------响应方法,调用命令对应的代理模型(这里属于查找调用关系)--------------------->
Proxy数据代理类,负责模型曾数据的操作(使用数据代理类同时也保证了Model层的移植性)
-------------------------代理类中数据做出相应改变,并且发送消息通知Command或Mediator------------------------------>
Mediator视图展示(监听到Proxy发送的消息Mediator做出相对应的UI界面改变)
4.主要实现步骤
5.代码实现
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 数据实体类
///
/// </summary>
public class MyData {private int _Level =0;public int Level{get { return _Level; }set { _Level = value; }}
}
using PureMVC.Patterns;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 数据代理类
/// 功能:模型层 数据的操作
/// </summary>
public class DataProxy : Proxy {/// <summary>/// 声明本类的名称/// </summary>public new const string NAME = "DataProxy";/// <summary>/// 引用“实体类”/// </summary>private MyData _MyData = null;/// <summary>/// 构造器/// </summary>public DataProxy():base(NAME){_MyData = new MyData();}/// <summary>/// 增加玩家等级/// </summary>public void AddLevel(int addNumber){//把参数累加到“实体类中”_MyData.Level += addNumber;//把变化了的数据,发送给“视图层”SendNotification("Msg_AddLevel", _MyData);}
}
2.定义视图类
using PureMVC.Patterns;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using PureMVC.Interfaces;
/// <summary>
/// 视图展示
/// 功能:属于“视图层”显示玩家ui页面
/// </summary>
public class DataMediator : Mediator {//定义本类的名称public new const string NAME = "DataMediator";//定义控件private Text TxtLevel;private Button BtnDisplayLevelNum;public DataMediator(GameObject goRootNode){//确定控件TxtLevel = goRootNode.transform.Find("Text").GetComponent<Text>();BtnDisplayLevelNum = goRootNode.transform.Find("BtnCount").GetComponent<Button>();BtnDisplayLevelNum.onClick.AddListener(OnClickAddLevel);}/// <summary>/// 定义一个点击事件/// </summary>private void OnClickAddLevel(){//定义消息,发送“控制层”SendNotification("Reg_StartDataCommand");}/// <summary>/// 本视图层允许接受的消息/// </summary>/// <returns></returns>public override IList<string> ListNotificationInterests(){IList<string> listResult = new List<string>();//可以接受的消息(集合)listResult.Add("Msg_AddLevel");return listResult;}/// <summary>/// 处理所有其他类,发给本类允许处理的消息/// </summary> /// <param name="notification"></param>public override void HandleNotification(INotification notification){switch (notification.Name){case "Msg_AddLevel"://把模型层发来的数据显示给控件MyData myData = notification.Body as MyData;TxtLevel.text = myData.Level.ToString();break;}}
}
3.定义控制类
using PureMVC.Patterns;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using PureMVC.Interfaces;
/// <summary>
/// 数据控制类
/// 功能:属于“控制层”,接收玩家的输入(或者视图层发来的输入消息),进行处理
/// </summary>
public class DataCommand : SimpleCommand {/// <summary>/// 执行方法/// </summary>/// <param name="notification"></param>public override void Execute(INotification notification){//调用数据层的“增加等级”的方法DataProxy datapro = (DataProxy)Facade.RetrieveProxy(DataProxy.NAME); //检索到从Facade注册的代理类,datapro.AddLevel(10);}}
4.PureMVC全局控制类
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using PureMVC.Patterns;
/// <summary>
/// PureMVC项目全局控制类
/// </summary>
public class AppFacade : Facade {/// <summary>/// 构造函数/// </summary>/// <param name="goRoot">UI界面的根节点</param>public AppFacade(GameObject goRoot){/*MVC三层的关联绑定*///控制层注册("命令消息"与控制层类的对应关系建立绑定)(当发送Reg_StartDataCommand消息时执行DataCommand)RegisterCommand("Reg_StartDataCommand", typeof(DataCommand));//视图层注册RegisterMediator(new DataMediator(goRoot));//模型层注册RegisterProxy(new DataProxy());}
}
5.定义入口调用启动
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class StartGame : MonoBehaviour {// Use this for initializationvoid Start () {//启动PureMvc框架AppFacade facade = new AppFacade(this.gameObject);}// Update is called once per framevoid Update () {}
}
代码运行流程:
在Unity使用PureMVC相关推荐
- Unity - 对PureMVC的理解和应用
#Unity - PureMVC的理解和应用 PureMVC顾名思义,比MVC更纯净的MVC架构,相比与MVC它耦合性更低.代码重用性更高,当然缺点也比较明显:事件的传递都要经过拆箱装箱.事件的执行都 ...
- 【unity】 PureMvc 入门尝试小案例
目录 目录 1:写pureMvc第一步需要做什么? 2:业务执行顺序是什么? 3:主要代码 3.1:数据部分(Proxy) 3.1.1:原始数据面板中text显示的value 3.1.2:proxy类 ...
- 20170916导出fuck 7654导航
Bookmarks 书签栏 unity Unity游戏开发有哪些让你拍案叫绝的技巧? [Unity3D学习 愤怒的小鸟攻略技巧秘籍 unity3d技巧 unity3d愤怒的小鸟实现 unity3d切换 ...
- PureMVC在Unity游戏开发中的应用
作为开发人员,我们都想写出优雅的代码,可又苦于自身能力不知该如何下手,而框架的作用正在与能够让你规范的去开发. 之前写Web的时候,总被要求采用MVC架构,的确非常好用,也从来没有质疑过这种架构的好与 ...
- [Unity]PureMVC框架解读(上)
PureMVC框架解读 简易UI框架 1.UI框架核心方法 BaseUI会记录UI的名字(枚举)和Controller用来将UI与具体操作方法解耦 UIManger利用字典记录所有的UI组件,然后提供 ...
- Unity PureMVC框架案例
引言 PureMVC框架解读上:https://blog.csdn.net/qq_29579137/article/details/73692842 PureMVC框架解读下:https://blog ...
- Unity实战(3):pureMVC框架应用
目录 前言 一.下载框架并编译生成dll文件 二.Unity搭建基本要素 三.pureMVC简要说明 四.pureMVC脚本编写 4.1 MyData脚本 4.2 MyDataProxy脚本 4.3 ...
- 视频教程-Unity客户端框架设计PureMVC篇视频课程(上)-Unity3D
Unity客户端框架设计PureMVC篇视频课程(上) 二十多年的软件开发与教学经验IT技术布道者,资深软件工程师.具备深厚编程语言经验,在国内上市企业做项目经理.研发经理,熟悉企业大型软件运作管理过 ...
- 视频教程-Unity客户端框架设计PureMVC篇视频课程(下)-Unity3D
Unity客户端框架设计PureMVC篇视频课程(下) 二十多年的软件开发与教学经验IT技术布道者,资深软件工程师.具备深厚编程语言经验,在国内上市企业做项目经理.研发经理,熟悉企业大型软件运作管理过 ...
最新文章
- 漫话:如何给女朋友解释什么是单例模式?
- LockSupport 使用
- 重磅 |“金砖”电商报告:5年后金砖五国网络零售将超3万亿美元
- 【重复制造精讲】Backflush 倒冲介绍
- Oracle数据库迁移后变慢,迁移数据之后,读取数据库变得很慢
- iOS物理碰撞、唱吧音频处理、仿淘宝联动效果等源码
- python第k序列元素查找_Python寻找第k小的元素
- html 星空效果,html5 canvas炫酷旋转银河系星空背景特效
- Caffe(13)--(SSRNet模型)Keras转Caffe教程
- [转] 史上最全英文免费编程电子书列表
- 强大好看的dz论坛社区源码手机端
- 完美安装运行Xcelsius 2008 SP3解决方案
- 02 | 领域、子域、核心域、通用域和支撑域
- 基于小波分解与LSTM的城市轨道短时客流预测
- Winform从入门到精通(41)——FileSystemWatcher(史上最全)
- 微软拥抱ChatGPT后,我亲自试了试新必应的个性搜索
- EasyExcel 中文文档
- 在线计算机词典,精编英汉计算机词典.pdf
- PHP--根据手机号-淘宝平台获取归属地运营商信息
- liunx服务器配置