来菜单流程看看加载UI的逻辑
再这里主要是有两个步骤要做
1是订阅UI打开成功后的事件
2是打开UI逻辑
底层是由事件类型的hash码分类的方法
这不是一般的字典是是作者处理过的字典 值都是由链表构成的
如果没有要载入的ui则要更新要载入的ab资源,并调用回调函数。
看一下这个m_LoadAssetCallbacks回调函数
他由其余几个回调函数组成。
发现了载入资源成功的回调,看下在哪里用到。
在生成资源的准备阶段就能发现
这个方法进去就是调用载入资源成功调用方法。
会到之前函数的地方进入第2个入口
这个分支发现组合逻辑和数据的时候会调用UI打开成功事件
赋值的地方是UI组件上的这
fire函数跟进到到最后
发现这个队列和订阅底层的 事件处理字典都是定义在同一个事件池脚本里。
查下引用,在update函数里面。依次出列,处理事件。
这个就是处理事件的语句。
这个事件是从handler里面取出来的。也就是打开ui前订阅的打开ui成功时调用的函数。
所以说这个处理函数的参数是由 event 队列提供的 也就是uicomponent中fire抛出的方法,而调用参数的确是handler提供的也就是 订阅的回调方法。这其实已经设计到事件的范畴了。
例图(来自臣定保博客)
例图(来自烟雨博客)
另外有一点创建的ui实例
这上面有个 UIFromLogic 的字段就是这个ui的逻辑了
是不是很实体有些相似,UI毕竟也是实体。但是还是有所区别。
看下这个字段的赋值
在这个ui初始化的时候,在ui实例里直接获取当前ui的逻辑脚本
看看逻辑类的层次关系
游戏中普通UI窗口会放UI组件上,血条是放在自己定义的节点下。