MVC
一下演示使用MVC和不使用MVC的做法区别。 前两个没有使用MVC
主面板逻辑:
mainPanel是该脚本名字
每个场景中不一定存在该面板,单纯的显隐需要去手动挂载过于麻烦。
所以自己读取创建面板出来(每个场景仅创建一次),存下该面板,执行其他逻辑
大项目可以直接删,防止场景上物体过多
角色面板逻辑:
获取主面板身上脚本,本来是用来判断是否为空的。 这里可以用于外界调用更新方法
为了防止修改,写一个属性,仅允许get'
Model数据
Unity中没有action,只有自带的UnityAction,且需要引入命名空间
事件本身私有,提供给外部添加移除方法即可。
确保第一次数据是初始的,且之后再次获取时,这个数据是最新的。 因为静态,单例全局只有一份
View界面
无需多言,看代码
*Controller业务逻辑
此脚本是连接数据模型和界面显示的重要桥梁
初始为空,加载面板时再获取
此处为第四个脚本,仅检测玩家输入
这里获取View引用的方法,是直接将两个脚本都挂到同一个物体上,然后getcomponent
玩家展示面板和主面板逻辑,他们的controller脚本写法基本相同,都是获取统一物体身上的view,然后监听按钮,控制显隐、数据更新、升级等
数据模块当中的这个事件,是在升级时调用的,因此在控制模块中加入view的更新方法。
记得退订
其他MVX
记住适合自己的才是最好的
MVP
MVC中v用的更新方法基于传进来的m的数据,而mvp中,不需要依赖m的数据
MVVM(不好)→MP
比如a里面的名字绑定b的名字,只需要改变b'就能改变a,不需要获取a的引用了。
MP:
这个在unity小框架里面提到过
MVE
PureMVC
只需要导入这三个文件夹即可
第二种可以打开它的vs工程,右键“生成。然后找到它的dll包,导入unity的plugins文件夹”
好处是只有一个插件,前提是你很熟练,不需要看代码
Model:Proxy
所有通知类的名字都做成统一常量
第二种,不传data
大Data实际上是父类里面的一个属性
PlayerDataOBJ是一个玩家数据类,也就是MVC中的Model
View:Mediator
这一步很重要 3、4
ViewComponent和notification.Body(事件内容)都是object类型,调用数据更新方法
:Facade
因为小instance其实还是父类,所以返回时还得转换一下
还没有control,所以创建一下controll
这时候其实就会执行Execute里面的内容