MVC框架探索(一) 模板脚本工具

前言

这个系列,我想和大家一起讨论一下unity游戏开发中最常见的一种ui框架——MVC。那么在讨论我自己写的mvc框架之前呢,我们可以先了解一下MVC在游戏开发中的运用场景以及背景。

MVC的背景介绍

做开发的小伙伴,应该多多少少听到过MVC这个词,那么到底什么是MVC呢?其实,MVC就是对于咱们程序的一种模型。而使用MVC模型所写的代码架构呢,实际上是为了分离程序表现(View,也称之为视图层)和数据逻辑(Model,也称之为数据层)的,控制层(Controller)获取到数据层的数据,然后去操作视图层。这种分离,更多的体现在代码层面,说的通俗一些,实际上就是用于解耦,避免视图方面的代码和数据处理方面的代码耦合在一个模块,对于将来代码的扩展,以及阅读性都能有极大的提升。

MVC在框架中各自的职能划分

介绍完MVC的好处,那么就需要了解,如果我们要写一个MVC框架,或者说MVC思想的UI底层支撑,那么我们需要做什么呢?其实很简单,就是分层。也就是说,我们最少需要M,V,C三个层,那么在代码上呢,我们需要创建这三个基类,用于派生出各个UI模块自己的MVC,下面我贴一下我的代码对于MVC的分层

而MVC各自的职能,只要不偏离我们的中心思想,那么具体的基类里需要实现的方法,可以根据自己的需要来进行改变。在我的代码中呢,我的划分为:Model层用于保存自身UI模块需要的数据以及操作的方法,View层则直接控制相关的预制体面板以及需要用到的其他预制体,而Ctrl层只负责从M,V层调用需要的方法,然后声明一些必要的UI生命周期即可,例如open,close,show,hide等方法

为什么需要脚本模板生成工具

其实这个问题的答案非常简单,为了偷懒。(哈哈哈哈~

试想一下,如果我们的游戏中,有几十个,甚至上百个不同的大大小小的面板,那如果每次制作完一个面板,都要手动的去分别创建MVC对应的脚本,那么工作量也是不小的,如果每个MVC各自的脚本里,又有一些父类重写的基本方法,那每次脚本创建的时候,都要重复的去添加这些代码,感觉会非常浪费时间,而且是浪费时间做重复的事情。那么为了让自己能有更多的精力集中于更好的内容的开发,工具是十分必要的。(还是为了偷懒,哈哈哈哈哈哈

通过上面设想的需求分析,我们其实能够很明确的知道,我们要制作的这个工具需要完成哪些事情。首先,我们需要它帮助我们创建脚本,然后呢,我们需要它帮我们在对应的位置写入一些模板代码

生成脚本文件

我希望的是我选中一个预制体,然后点击工具生成,就可以帮我生成好对应的文件夹以及脚本文件。那么我们只需要知道对应的API然后写出来即可。

但是在这里,我用了一个小技巧。为了后续方便写入脚本代码,我在生成脚本文件时,除了一写基本的声明,还写入一些标志字符串,在后续写入模板代码时,只需要用字符串替换即可。在后续的代码中,可以看到这些标志字符串的作用。

View层模板代码

为什么View层的代码我要单独处理呢?回到我们一开始规定的View层的作用。我们MVC中规定,V层管理自身的预制体。那么管理自身的预制体以及相关的组件,我们需要获取预制体中的各个物体以及相关的组件,这一部分,实际上也是可以写入工具的,因为获取组件的代码,如果纯靠手写,也是非常繁琐而且是大量重复的。所以,我们需要工具来取代这部分工作。

这部分的代码思路其实非常的简单,获取预制体及其子物体,并且查找自身以及子物体所带有的组件。那么查找这些物体,我使用的是递归查找的方式,这得益于组件的树的结构的思想。

在查找组件的方法中,我这里使用了一点小技巧,我把需要查找的组件提前声明成一个List

这样查找组件时,可以过滤掉不需要的组件,还可以提前对不需要查找组件的gameObject进行标签tag的规划,在查找时可以过滤不必要的信息,在性能上也能带来小小的提升

将模板代码写入对应脚本

这里也非常简单了,只需要找到对应的脚本文件,然后查找到我们事先预留好的标志字符串,直接进行字符串替换即可。

总结

从整个流程来看,其实这个脚本工具的制作也没有那么复杂。无非是需要明确我们到底需要做到哪些事情。首先我们需要明确需求,以及分析需求。

我们决定使用MVC作为UI业务逻辑的开发框架,因为在整个游戏开发过程中我们可能会制作大量的UI预制体面板,所以为了避免大量的重复创建脚本以及写入相同的可复用的模板代码,所以我们需要制作这个工具。

而工具的制作也非常简单,只需要知道需要的API,然后按部就班的把需求完成即可。

在下一篇文章中,我们将具体来探讨MVC思想在代码中的实现。

下面我贴一下我使用工具生成的脚本以及代码。

  • 30
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值