MVC框架在Unity3D中的应用

Unity中的MVC框架

1.图片解析
在这里插入图片描述
2.个人总结MVC框架各个模块的代码

单列模块MonoSingleton用于结局平凡的使用单列带来的繁琐。

public class MonoSingleton<T> : MonoBehaviour 
    where T:MonoBehaviour
{
    private static T m_Instance;
    public static T Instance
    {
        get
        {
            return m_Instance;
        }
    }
    protected virtual  void Awake()
    {
        m_Instance = this as T;
    }
}

MVC基类基本的调用方法我都是放在这里的

public static class MVC
{
    public static Dictionary<String, Model> Models = new Dictionary<string, Model>();//名字--model
    public static Dictionary<string, View> Views = new Dictionary<string, View>();//名字--view
    public static Dictionary<string, Type> CommandMap = new Dictionary<string, Type>();//名字--事件

    //注册View
    public static void RegisterView(View view)
    {
        //防止重复注册
        if(Views.ContainsKey(view.name))
        {
            Views.Remove(view.name);
        }
        view.RegisterAttentionEvent();
        Views[view.Name] = view;
    }
    //注册Model
    public static void RegisterModel(Model models)
    {
        Models[models.Name] = models;
    }
    //注册CommandMap
    public static void RegisterController(string evebtName, Type controllerType)
    {
        CommandMap[evebtName] = controllerType;
    }

    //获取model
    public static T GetModel<T>()
        where T :Model 
    {
        foreach (var m in Models.Values)
        {
            if(m is T)
            {
                return (T)m;
            }
        }
        return null;
    }

    //获取View
    public static T GetView<T>()
        where T : View
    {
        foreach (var v in Views.Values)
        {
            if (v is T)
            {
                return (T)v;
            }
        }
        return null;
    }

    //发送事件
    public static void SendEvent(string eventname,object data=null )
    {
        if (CommandMap.ContainsKey(eventname))
        {
            Type T = CommandMap[eventname];
            
            //控制器创建
            Controller C = Activator.CreateInstance(T) as Controller;

            C.Execute(data);
        }
        //view处理
        foreach (var v in Views.Values)
        {
            if (v.AttentionList.Contains(eventname))
            {
                //执行
                v.HandeEvent(eventname, data);
            }
        }
    }  
}

View 解释模型,模型更新请求,发送用户输入给我控制器,允许控制器选择视图;

using System.Collections.Generic;
using UnityEngine;

public abstract class View : MonoBehaviour
{
    //通过名字存储到游戏中(游戏标识)
    public abstract string Name { get; }

    //事件关系列表
    [HideInInspector]
    public List<string> AttentionList = new List<string>();

    //注册事件
    public virtual void RegisterAttentionEvent()
    {

    }

    //处理事件
    public abstract void HandeEvent(string name, object data) ;

    //发送事件
    protected void SendEvent(string eventName, object data = null)
    {
        MVC.SendEvent(eventName, data);
    }

    //获取模型
    protected T GetModel<T>()
        where T : Model
    {
        return MVC.GetModel<T>() as T;
    }
}

Model功能:封装应用程序状态,相应查询,应用程序功能通知视图改变

public  abstract class Model
{
    //名字标标识
    public abstract string Name { get; } 

    //发送事件
    protected void SendEvent(string eventName,object data=null)
    {
        MVC.SendEvent(eventName, data);
    }

}

Controller:定义程序行为,用户动作映射,模型更新,响应视图

public abstract  class Controller
{
    //执行事件
    public abstract void Execute(object dath);

    //获取模型
    protected T GetModel<T>()
        where T : Model
    {
        return MVC.GetModel<T>() as T;
    }
    
    //获取视图
    protected T GetView<T>()
        where T : View
    {
        return MVC.GetView<T>() as T;
    }

    //注册模型
    protected void RegisterModel(Model model)
    {
        MVC.RegisterModel(model);
    }

    //注册视图
    protected void RegisterView(View view)
    {
        MVC.RegisterView(view);
    }

    //注册控制器
    protected void RegisterController(string eventName,Type contorllerType)
    {
        MVC.RegisterController(eventName, contorllerType);
    }
}

本框架来源于一个大二的学生,不喜勿喷,个人总结。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值