Unity 记录

MVC框架案例(接Mvc游戏注意事项)

2018-07-02  本文已影响74人  Clean_1306

下面介绍一个根据一个简单MVC框架写的小案例来说明一下(即利用Mvc来进行解耦)

0702-01.png

图片里面的脚本就是这个案例所写的脚本 ps:Framework文件夹里面的就是这个mvc框架的code;

这里开始说明001Init场景的脚本

0702-02.png 0702-03.png

====================================================
上面的图就是001场景的场景视图和唯一挂载的脚本“Game”的说明
看到这,有人问了,那这个E_StartUp事件的控制器是什么呢?别急,容我慢慢道来

下面就是E_StartUp事件控制器的所有代码


0702-04.png

对,就是用来注册其他控制器(controller)和模型用的(model),这样就是为了方便管理,至于Game脚本的其他代码,我这里就不上了,先接着往下降,稍后我会上传这个案例给大家的,别急!

下面我们来到案例的主场景“02Main”来看看(至于01Test是什么呢?其实是无关紧要的,只是用来测试别的猜想的,嘿嘿,懒得删了)

0702-05.png

其中,Panel物体挂载了一个脚本,PanelScript,这个脚本继承自View(对了,这里说明一下,Const这个脚本就是用来存放所有事件名字的,可别纠结这个是干啥的了哦,staticdata脚本是用来存放一些静态数据的,不过这个案例里面没有用到,所以也可以不用管它)


image.png

这里注意一点 Args里面的脚本全部都是用来传参数用的,用来传输各个事件需要的参数,这里就不多介绍了!

private Button showOrHideBtn;  //隐藏显示标题按钮
    private Button add;            //+按钮
    private Button reduce;         //-按钮
    private Text showText;         //显示+-按钮操作后数字的内容
    public Text ShowText
    {
        get { return showText; }
        set { showText = value; }
    }
    private GameObject titleGO;   //标题游戏物体

    private GameObject rootGO;    //所有物体的根节点
    void Start()
    {
        rootGO = GameObject.Find("Canvas");

        add = rootGO.transform.Find("Panel/AddNumBtn").GetComponent<Button>();
        reduce = rootGO.transform.Find("Panel/ReduceNumBtn").GetComponent<Button>();
        showOrHideBtn = rootGO.transform.Find("Panel/ShowOrHideBtn").GetComponent<Button>();
        showText= rootGO.transform.Find("Panel/ContentShow").GetComponent<Text>();
        titleGO = rootGO.transform.Find("Panel/Title").gameObject;

        //添加按钮事件
        add.onClick.AddListener(AddNum);
        reduce.onClick.AddListener(Reduce);
        showOrHideBtn.onClick.AddListener(ShowOrHideTitle);
    }

  
    /// <summary>
    /// View的对应名字 ps:每个view和model都有自己取得相对应的名字的Name属性
    /// </summary>
    public override string Name
    {
        get
        {
            return Consts.V_PanelScript;
        }
    }

    public void AddNum()
    {
        NumberArgs na = new NumberArgs()
        {
            isAdd = true,
            number = 1,
        };
     SendEvent(Consts.C_ChangeNumberController, na);
    }

    public void Reduce()
    {
        NumberArgs na = new NumberArgs()
        {
            isAdd = false,
            number = 1,
        };
        SendEvent(Consts.C_ChangeNumberController, na);
    }

    //显示或隐藏标题按钮事件
    public void TitleBtn()
    {
        SendEvent(Consts.VE_ShowOrHideTitle);
    }

    //显示隐藏的处理
    void ShowOrHideTitle()//Consts.VE_ShowOrHideTitle  关心的事件名字
    {
        if (titleGO.activeSelf)
        {
            titleGO.SetActive(false);
        }
        else
        {
            titleGO.SetActive(true);
        }
    }

    //注册关心的事件
    public override void RegisterAttentionEvent()
    {
        AttentionList.Add(Consts.VE_ShowOrHideTitle);
    }

    //处理view关心的事件
    public override void HandleEvent(string name, object data)
    {
        switch (name)
        {
            case Consts.VE_ShowOrHideTitle:
                ShowOrHideTitle();
                break;
        }
    }

这里就是这个脚本的全部代码,主要用来处理这个案例的按钮的事件,(其实也就只有按钮的事件,别的懒得写了,其实别的功能也差不多了,参考这个就可以了)

至此就差不多了,说明什么的大概先这样吧

下面丢上案例运行的效果图(需要从001Init场景启动哦!!!)

案例效果.gif

下面是案例的百度盘连接,为什么百度盘,因为我还没学会用github- -~~~~~

链接:https://pan.baidu.com/s/1cBAzvEv0PQTigviVYuOi4Q 密码:q03b

上一篇下一篇

猜你喜欢

热点阅读