unity3d + PureMVC框架搭建

0、流程:LoginView-SendNotification()---->LoginCommand--Execute()--->调用proxy中的函数操作模型数据--LoginProxy---->接收服务器返回-操作数据-返回通知视图控制器--LoginMediator--->操作视图。

(虽然很繁琐,一个功能需要写很多个文件,但是对于大型项目来说使用起来是很舒服的。比如A复制背包,B复制商场,这里都需要用到人物的金币信息,对与A/B来说我只要监听到了金币更新的操作,我就通过视图控制器来做update操作就可以了,不关心是谁的操作引起的金币变化。好处就不多说了,看下面代码吧)


1、下载puremvc,http://www.puremvc.org/

2、复制puremvc源代码到项目scripts目录下

193836_u61E_1582495.png

3、AppFacade.cs文件,这是puremvc的启动文件

using UnityEngine;
using System.Collections;
using PureMVC.Patterns;
using PureMVC.Interfaces;
public class AppFacade : Facade,IFacade {
	public const string STARTUP = "starup";
	public const string LOGIN = "login";
	private static AppFacade _instance;
	public static AppFacade getInstance
	{
		get{ 
			if (_instance == null) {
				_instance = new AppFacade ();
			}
			return _instance;
		}
	}
	protected override void InitializeController ()
	{
		base.InitializeController ();
		RegisterCommand (STARTUP, typeof(StartupCommand));
		RegisterCommand (NotiConst.S_LOGIN, typeof(LoginCommand));
	}
	public void startup()
	{
		SendNotification (STARTUP);
	}
}

4、在场景中创建一个GameManager.cs文件,挂在Main Camera上

using UnityEngine;
using System.Collections;

public class GameManager : MonoBehaviour {

	// Use this for initialization
	void Start () {
		DontDestroyOnLoad (this.gameObject);
		AppFacade.getInstance.startup ();
	}
	
	// Update is called once per frame
	void Update () {
	
	}
}

5、编写StartupCommand.cs文件,在这里注册所有的command。

using UnityEngine;
using System.Collections;
using PureMVC.Patterns;

public class StartupCommand : MacroCommand {
	protected override void InitializeMacroCommand ()
	{
		AddSubCommand (typeof(ModelPreCommand));
	}

}

5、创建ModelPreCommand.cs文件,这里注册proxy文件。

// 创建Proxy,并注册。
public class ModelPreCommand : SimpleCommand {

    public override void Execute (PureMVC.Interfaces.INotification notification)
    {
        Facade.RegisterProxy (new LoginProxy());
    }
}

6、在AppFacade.cs文件InitializeController方法中注册消息号与Command直接的监听关系。这里使用了NotiConst来定义所有的消息号。

7、创建LoginView.cs这是一个视图文件,同时创建LoginViewMediator.cs文件。

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using PureMVC.Patterns;
using PureMVC.Interfaces;

public class LoginViewMediator : Mediator,IMediator {

    public const string NAME = "LoginViewMediator";

    public LoginViewMediator(LoginView _view):base(NAME,_view){
        
    }
    //需要监听的消息号
    public override System.Collections.Generic.IList<string> ListNotificationInterests ()
    {
        List<string> list = new List<string>();
        list.Add (NotiConst.R_LOGIN);
        return list;
    }
    //接收消息到消息之后处理
    public override void HandleNotification (PureMVC.Interfaces.INotification notification)
    {
        string name = notification.Name;
        object vo = notification.Body;
        switch (name) {
        case NotiConst.R_LOGIN:
                (this.ViewComponent as LoginView).receiveMessage (vo);
                break;
        }
    }
}


LoginView.cs

void Start () {
//注册mediator
        AppFacade.getInstance.RegisterMediator (new LoginViewMediator (this));
    }

void OnDestory(){
        AppFacade.getInstance.RemoveMediator (LoginViewMediator.NAME);
    }


8、编写LoginCommand.cs文件,监听发送过来的消息。

在AppFacade里面InitializeController注册:RegisterCommand (NotiConst.S_LOGIN, typeof(LoginCommand));

using UnityEngine;
using System.Collections;
using PureMVC.Patterns;

public class LoginCommand : SimpleCommand {

    public override void Execute (PureMVC.Interfaces.INotification notification)
    {
        Debug.Log ("LoginCommand");
        object obj = notification.Body;
        LoginProxy loginProxy;
        loginProxy = Facade.RetrieveProxy (LoginProxy.NAME) as LoginProxy;
        string name = notification.Name;
        switch (name) {
        case NotiConst.S_LOGIN:
            loginProxy.sendLogin (obj);
            break;
        }
    }
}

9、创建LoginProxy.cs文件,这里复制数据处理,与服务器通讯等操作。

using UnityEngine;
using System.Collections;
using PureMVC.Patterns;
using PureMVC.Interfaces;
using LitJson;

public class LoginProxy : Proxy,IProxy {
    public const string NAME = "LoginProxy";
    // Use this for initialization
    public LoginProxy():base(NAME){}
    //请求登陆
    public void sendLogin(object data)
    {
        //与服务器通讯,返回消息处理玩之后,如果需要改变试图则调用下面消息
        receiveLogin();
    }
    // 登陆返回
    private void receiveLogin(JsonData rData)
    {
       SendNotification (NotiConst.R_LOGIN, rData);
    }
}

10、测试。在视图里面创建一个按钮点击按钮发送登陆消息。

void sendNotice(){
    int obj = 233333;
    AppFacade.getInstance.SendNotification (NotiConst.S_LOGIN,obj);
}

然后在写一个接收到服务器端返回数据的操作函数

public void receiveLogin(object obj){
    //下一步操作
}


转载于:https://my.oschina.net/u/1582495/blog/601547

     本课程总体分上、下两部,上部解决应用PureMVC框架开发项目问题,下部则着力解决深入掌握框架源码核心、彻底掌握框架思想、建立框架思维,为开发自己的专属框架(以及成为游戏架构师)打下坚实基础!本课程下部分为四大部分:一:应用层架构设计      总结《PureMVC框架设计(上篇)》的基础之上,进一步阐述PureMVC三层流转关系图,以及讲解PureMVC与标准MVC设计的联系与区别点。讲解PureMVC中对于视图层内部的进一步分化技术:View与Mediator。二:App应用(游戏)界面开发      根据我们已经掌握的PureMVC 架构知识点,我们开发一个具体的Unity应用项目。本项目重点讲解复杂UI界面中对于PureMVC 的详细使用过程以及应用技巧。三:开源架构源码分析      我们就PureMVC 开源整体架构图、PureMVC主要的设计模式、源代码目录结构、三大核心类、外围类进行详细梳理架构源码与其中蕴含着的优秀设计思想。四:架构设计总结      我们经过架构源码的详细分析与研究,总结探讨PureMVC中观察者、中介者、外观、代理等模式在架构中的设计与应用闪光点。我们还会就PureMVC在团队开发中关于模块化协作开发、以及架构三层中设计“颗粒度”等问题展开讨论。一、热更新系列(技术含量:中高级):A:《lua热更新技术中级篇》https://edu.csdn.net/course/detail/27087B:《热更新框架设计之Xlua基础视频课程》https://edu.csdn.net/course/detail/27110C:《热更新框架设计之热更流程与热补丁技术》https://edu.csdn.net/course/detail/27118D:《热更新框架设计之客户端热更框架(上)》https://edu.csdn.net/course/detail/27132E:《热更新框架设计之客户端热更框架(中)》https://edu.csdn.net/course/detail/27135F:《热更新框架设计之客户端热更框架(下)》https://edu.csdn.net/course/detail/27136二:框架设计系列(技术含量:中级): A:《游戏UI界面框架设计系列视频课程》https://edu.csdn.net/course/detail/27142B:《Unity客户端框架设计PureMVC篇视频课程(上)》https://edu.csdn.net/course/detail/27172C:《Unity客户端框架设计PureMVC篇视频课程(下)》https://edu.csdn.net/course/detail/27173D:《AssetBundle框架设计_框架篇视频课程》https://edu.csdn.net/course/detail/27169三、Unity脚本从入门到精通(技术含量:初级)A:《C# For Unity系列之入门篇》https://edu.csdn.net/course/detail/4560B:《C# For Unity系列之基础篇》https://edu.csdn.net/course/detail/4595C: 《C# For Unity系列之中级篇》https://edu.csdn.net/course/detail/24422D:《C# For Unity系列之进阶篇》https://edu.csdn.net/course/detail/24465四、虚拟现实(VR)与增强现实(AR):(技术含量:初级)A:《虚拟现实之汽车仿真模拟系统 》https://edu.csdn.net/course/detail/26618五、Unity基础课程系列(技术含量:初级) A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》 https://edu.csdn.net/course/detail/24643B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》https://edu.csdn.net/course/detail/24645 C:《Unity ECS(二) 小试牛刀》https://edu.csdn.net/course/detail/27096六、Unity ARPG课程(技术含量:初中级):A:《MMOARPG地下守护神_单机版实战视频课程(上部)》https://edu.csdn.net/course/detail/24965B:《MMOARPG地下守护神_单机版实战视频课程(中部)》https://edu.csdn.net/course/detail/24968C:《MMOARPG地下守护神_单机版实战视频课程(下部)》https://edu.csdn.net/course/detail/24979
本课程总体分为五大部分:一: MVC基本设计理念    首先讲解游戏(包含VR、AR)与软件项目为什么需要有架构与框架的理念。然后讲解游戏引擎、服务端与客户端框架的区分,且梳理分析国内目前主流的游戏客户端架构模式以及优缺点分析。以及PureMVC与StrangeIOC两种MVC开源架构的总体技术刨析。二:PureMVC开源框架插件下载与搭建基础环境。    笔者以开发一个简单的“Hello World”为例,详细讲解PureMVC基础的概念,与框架搭建过程,让学员以较快的时间,学会PureMVC框架的基础理念与应用技巧。三:PureMVC架构设计理念。    基于前面简单版本的开发过程,初步刨析PureMVC架构以“Mediator+事件通知机制”总体设计理念。讲解什么是中介者设计模式(Mediator Pattern),以及事件机制在PureMVC中的基础作用。**分析PureMVC架构基本的开发流程,以及两种不同类型的消息机制。四:开发一款游戏项目(Flappy Birds),集成PureMVC+SUIFW(此框架课程均以发布)两种框架模式,讲解在具体开发一款游戏产品时,如何分析、把握框架游戏脚本之间的关联关系,如果发挥PureMVC彻底解耦的开发理念。五:基于前面游戏项目的开发,进一步刨析PureMVC架构的高级开发技巧:    1:PureMVC框架类与脚本之间的相互通讯机理。    2:基于PureMVC框架原理,实现游戏项目模型与脚本的彻底分离技术,真正实现美工与研发的同步开发 与无缝对接技术。    3:掌握命令层(即:控制层)中SimpleCommand 与MacroCommand 的区别与具体开发应用技巧。 一、热更新系列(技术含量:中高级):A:《lua热更新技术中级篇》https://edu.csdn.net/course/detail/27087B:《热更新框架设计之Xlua基础视频课程》https://edu.csdn.net/course/detail/27110C:《热更新框架设计之热更流程与热补丁技术》https://edu.csdn.net/course/detail/27118D:《热更新框架设计之客户端热更框架(上)》https://edu.csdn.net/course/detail/27132E:《热更新框架设计之客户端热更框架(中)》https://edu.csdn.net/course/detail/27135F:《热更新框架设计之客户端热更框架(下)》https://edu.csdn.net/course/detail/27136二:框架设计系列(技术含量:中级): A:《游戏UI界面框架设计系列视频课程》https://edu.csdn.net/course/detail/27142B:《Unity客户端框架设计PureMVC篇视频课程(上)》https://edu.csdn.net/course/detail/27172C:《Unity客户端框架设计PureMVC篇视频课程(下)》https://edu.csdn.net/course/detail/27173D:《AssetBundle框架设计_框架篇视频课程》https://edu.csdn.net/course/detail/27169三、Unity脚本从入门到精通(技术含量:初级)A:《C# For Unity系列之入门篇》https://edu.csdn.net/course/detail/4560B:《C# For Unity系列之基础篇》https://edu.csdn.net/course/detail/4595C: 《C# For Unity系列之中级篇》https://edu.csdn.net/course/detail/24422D:《C# For Unity系列之进阶篇》https://edu.csdn.net/course/detail/24465四、虚拟现实(VR)与增强现实(AR):(技术含量:初级)A:《虚拟现实之汽车仿真模拟系统 》https://edu.csdn.net/course/detail/26618五、Unity基础课程系列(技术含量:初级) A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》 https://edu.csdn.net/course/detail/24643B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》https://edu.csdn.net/course/detail/24645 C:《Unity ECS(二) 小试牛刀》https://edu.csdn.net/course/detail/27096六、Unity ARPG课程(技术含量:初中级):A:《MMOARPG地下守护神_单机版实战视频课程(上部)》https://edu.csdn.net/course/detail/24965B:《MMOARPG地下守护神_单机版实战视频课程(中部)》https://edu.csdn.net/course/detail/24968C:《MMOARPG地下守护神_单机版实战视频课程(下部)》https://edu.csdn.net/course/detail/24979
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值