ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Unity UI MVC笔记

Unity UI MVC笔记 概述MVC的核心就是视图类不写任何业务代码只接受和视图类适配的拿来能直接显示、绑定回调的数据类。比如图标不能传资源路径而要传Sprite。MVC的反义词则是一个类负责视图显示和业务它会去其他类拿自己要的数据然后处理业务、显示。为什么要用MVC一个面板如果要在游戏不同场景里显示数据来自不同的类在A场景里来自A类在B场景来自B类且B场景根本不存在A类。这时候如果不用MVC就要在面板里if判断当前场景然后这个面板会同时引用到A类和B类代码极其繁琐混乱。用MVC则让C判断场景类型去相应的类拿到数据喂给V。在一个面板多场景复用的情况下MVC是必须的。在一个面板只用在一个场景时则可以为复用做好准备。复用视图类意味着视图类不能引用控制器引用控制器意味着和特定场景耦合。而一些视图显示的信息来自不止一个模块视图不引用控制器模块要保持独立肯定也不引用视图那么就让控制器引用它们所有。包含动态生成控件的面板的MVC动态生成按钮、格子的面板点击后通常会在选中项显示选中框会显示详情页或者固定的详情页更新。肯定有一个生成控件列表要记录当前选中项这些是放在视图还是控制器按照视图的职责控件引用肯定要放视图否则视图就没意义了。动态生成控件、记录当前选中项、切换选中项的显示本身又是业务代码。如果把这些业务代码也放控制器那生成控件就是控制器把控件列表克隆好传入视图由视图的成员引用。记录当前选中项如果放在控制器控制器创建控件时绑定好点击方法包括原来选中项取消选中点击项选中切换选中项的显示放在控制器控件引用在视图那么控制器一定要调用视图的一个方法。必须放在视图的成员只有需要从检查器拖的对象。比如挂载控件的根物体。控制器把控件列表生成好由视图挂载。选中项是玩家按下选中当前选中取消按下的控件赋值给选中项当前选中项选中。如果生成控件列表、选中项都放视图视图负责生成控件、选中项的切换属于把一部分UI业务放在视图类按照MVC控制器准备好参数给视图视图动态生成控件再传参给动态控件。这里一个问题是点击控件触发切换选中项这个方法在视图要么控制器访问视图拿到这个方法塞进参数要么到视图这一步绑定然后发现在foreach里不允许改循环项。那这个点击的委托就作为控件的初始化参数传入不再放在参数类里。就像这一段控件初始化回调单独作为一个参数传入如果把config直接传入这foreach里不允许修改config里的内容也就无法在这一步把切换选中加进去。如果按一个控件要切换选中显示还要更新详情页切换选中方法在视图更新详情方法在控制器等于一个格子的按下回调在2步中被添加2个回调。这里是背包显示格子我发现这里修改foreach项并不报错。但是这个例子报错。我查了一下因为这里循环元素是结构体用类就没问题。按钮对应有参回调动态生成按钮列表的、有输入栏的、有下拉框的面板按下确定时本质是把选中项作为参数执行回调。这个确定按钮表面无参实际需要在视图类封装一个有参委托执行。参数类型取决于输入控件类型。有很多需要单独更新的控件的面板的MVC很多面板如HUD控件很多初始化时全部更新一次显示之后则是哪一块数据更新单独更新显示那么控制器需要更新每个控件的方法。那么此时这些数据没有必要加入视图参数类了显示面板时把更新方法全调用一遍参数类放按钮回调等只需要绑定一次永远不变的参数。
返回列表