一个用于Unity3D游戏开发的简易MVC框架,用于开发一些小型的游戏足够了,调理很清晰。框架来源是泰课在线上NickyMa讲师的保卫萝卜中的MVC框架,个人感觉非常不错的一篇教程,有兴趣可以去看看,网址: http://www.taikr.com/course/308 ,我只是学习了一下,写这篇Blog也是为了再理一下思路和记录下来,方便以后使用。
Unity3D中的操作
具体MVC的原理我就不讲了,Google一下,会有很多的介绍。直接讲代码书写,首先打开Unity3D,创建1个文件夹命名为MVC,再创建三个脚本,分别命名为Model,Controller,View。在新建一个脚本命名为MVC,用于管理Model,Controller,View这三个类,包括之间的事件发送,获取和注册。
Model:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public abstract class Model
{
public abstract string Name { get; }
protected void SendEvent(string eventName, object data = null)
{
MVC.SendEvent(eventName,data);
}
}
View:
using System;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
public abstract class View : MonoBehaviour
{
//视图标识
public abstract string Name { get; }
//关心事件列表
public List<string> AttationEvents =new List<string>();
//事件处理函数
public abstract void HandleEvent(string eventName, object data);
//获取模型
protected Model GetModel<T>()
where T : Model
{
return MVC.GetModel<T>();
}
//发送消息
protected void SendEvent(string eventName,object data=null)
{
MVC.SendEvent(eventName,data);
}
}
Controller:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public abstract class Controller
{
//获取模型
protected Model GetModel<T>()
where T : Model
{
return MVC.GetModel<T>();
}
//获取视图
protected View GetView<T>()
where T : View
{
return MVC.GetView<T>();
}
protected void RegisterModel(Model model)
{
MVC.RegisterModel(model);
}
protected void RegisterView(View view)
{
MVC.RegisterView(view);
}
protected void RegisterController(string eventName, Type controllerType)
{
MVC.RegisterController(eventName,controllerType);
}
//处理系统消息
public abstract void Execute(object data);
}
MVC:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public static class MVC
{
//存储MVC
public static Dictionary<string,Model> Models =new Dictionary<string, Model>();//名字--模型
public static Dictionary<string, View> Views = new Dictionary<string, View>();//名字--视图
public static Dictionary<string, Type> CommandMap = new Dictionary<string, Type>();//事件名字--控制器类型
//注册
public static void RegisterModel(Model model)
{
Models[model.Name] = model;
}
public static void RegisterView(View view)
{
Views[view.Name] = view;
}
public static void RegisterController(string eventName, Type controllerType)
{
CommandMap[eventName] = controllerType;
}
//获取
public static Model GetModel<T>()
where T:Model
{
foreach (Model m in Models.Values)
{
if (m is T)
{
return m;
}
}
return null;
}
public static View GetView<T>()
where T:View
{
foreach (View v in Views.Values)
{
if (v is T)
{
return 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);
}
//视图响应事件
foreach (View v in Views.Values)
{
if (v.AttationEvents.Contains((eventName)))
{
//视图响应事件
v.HandleEvent(eventName,data);
}
}
}
}
代码的书写基本按照标题上的那张图片,今天就这么多吧,等有空,我做个Demo,讲下如何使用这个简单的MVC框架。