美文网首页
Unity中简单的Mvc架构(上)

Unity中简单的Mvc架构(上)

作者: 俊客_aff2 | 来源:发表于2018-12-01 20:13 被阅读0次

    How do you using unity Mvc In My Project !o,that it is!

    如何运用mvc到自己的unity项目中呢?好的我们现在就来学习学习

    1.So first of all, what do you know about MVC?
    咳咳,不秀英文了,首先你得知道什么是mvc,顾名思义,mvc被分作三层,model层,view层,control层,如果你之前搞过javaweb,那么你可能会知道一个spring mvc,通过依赖注入,来生成对应m层,v层和c层进行开发,当然我们这里不会利用spring,首先在unity开发无需要spring这个偏前端的工作能够前后端分离的步骤,所以我们只需要把这个玩意进行简化,简化,再简化,我们给它起个名字,Simple Mvc。
    可是,听上去还是很高端呀,别急,先听我慢慢道来!
    一个大的项目如果分成几个人来做,那么每个人所开发的均就是一个模块,那么如果有A,B,C三个程序员。他们分别也做对应的模块,比如A程序员做交互系统。B程序员做物品栏界面,C程序员做开始菜单界面,那么出现这种情况会发生什么呢?
    1.C程序员所做的开始菜单进入游戏,生成游戏player对象交予A,A触碰物体进行调度交予B,B调度物品,如果使用可能要调度单位的动作,所以要给A一个接口,如果涉及保存还得给C一个接口。那么这个中途就会出现多次频繁的调度了。
    那么就会出现下图这个情况

    Programmer 开发功能 调度
    陈A 移动交互 a a-b,a-c
    王B 菜单物品 b b-a,b-c
    姜C 游戏UI c c-a,c-b

    那么我的妈呀,不久频繁触发abc到处乱调用了嘛,如果没有mvc这个结构的话,如果那个程序员是个傻13,不就整个程序都报错了嘛。其他程序员又没有接触过其他人的开发,整个项目就完蛋拉!

    所以,mvc应运而生,它就是god降生下来拯救这些企业,噢不,是拯救程序员

    如果大家接触过设计模式相关的书,可能会听说工厂模式和生产者呀,以及观察者这些模式,当然如果大家没接触过也无所谓,其实这里面涉及到一个中间层的观念,也就是创造一个中间的层次来控制这三个人开发的相互调用,这样就算哪一个人代码有bug,其他人也不会因此报错,而手足无措。那么经过这个中间层之后调度模式是怎么样的呢?

    Programmer 开发功能 调度
    陈A 移动交互 a a-中间层-?
    王B 菜单物品 b b-中间层-?
    姜C 游戏UI c c-中间层-?

    好啦,概念性的东西就跟大家讲完拉。现在我们现在可以从理论来出发了。前面说的如果没看懂其实也无所谓拉。
    首先我们需要设计一个Controller类,用来调度model类和View类。众所周知,model是数据相关的类,Controller类是用来进行扮演中间层。通过传入model到controller相应去修改view。
    我们先来设计Controller。我们需要用到设计模式的思想,任何对象都可以用一层封装,所以我们设计一个ICommand接口类
    这个类顾名思义,也就是掌管所有可执行命令的封装。比如增加物品,减少物品,显示物品栏等等等等,那么就不说废话,直接来写我们这个类吧

    using System;
    using System.Collections.Generic;
    
    public interface ICommand
    {void Excute(INotifier inotifier);
    
    }
    

    我们可以看到这个类里面只有一个方法,这个方法便是执行当前命令类的命令。因为每个命令肯定需要传递一个信息,我们接着把这个信息也给封装起来,也就是INotifier 类/
    所以,我们不气不馁,接着来写下一个类
    INotifier.cs类

    using System;
    using System.Collection.Generic
    
    public class INotifier
    { public string msg;
    public object body;// 可以传递任何类型的信息。运用拆包装包的思想
    public string sender;//标记类
    }
    public INotifier(string msg,object body,string sender)
    { this.msg=msg;
    this.body=body;
    this.sender=sender;}
    public INotifier(string msg,object body)
    //省略无数不同参数的构造方法
    

    好了,那么我们这个消息类也写完了,那我们现在就可以实现最为重要的command类了

    using System.Collections;
    using System.Collections.Generic;
    
    using UnityEngine;
    public class controller  {
        private Dictionary<string,ICommand> CommandFlow;
        // Use this for initialization
        public controller()
        {
            CommandFlow = new Dictionary<string, ICommand> ();
        }
        public void AdjustCommand(string msg,ICommand i)
        {
            if (!CommandFlow.ContainsKey (msg)) {
                CommandFlow.Add (msg, i);
            
            }
    
        }
        public void Excute(Observer o)
        {
            if (CommandFlow.ContainsKey (o.msg)) {
                CommandFlow [o.msg].Excute(o);
            
            }
    
        }
    
    }
    
    

    这里面就覆盖了这其中的核心思想,用一个字典存储对应的Icommand类,然后通过字典add,和对应检索找到icommand抽象类的对应具体,然后执行excute方法即可。
    之后的view层和model层也都可以用到这样的思想,具体是怎么样,那我们下回再说!

    相关文章

      网友评论

          本文标题:Unity中简单的Mvc架构(上)

          本文链接:https://www.haomeiwen.com/subject/lbircqtx.html