UGUI整体解决方案-案例篇_第十三章
服务类,先弄一个静态单例 Instance,用来实例化、获取该服务类
构造单张卡牌的数据模型
调用以上接口,这是当前游戏汇总的卡牌数据初始化
卡牌主页面,其中声明的变量,包含卡牌总数,卡牌对象池,卡牌数据列表容器,拖曳根节点,结束拖曳的回调_onEnd函数
对应的表现实体,是这个节点,其中是包含Grid LayOut Group组件,进行格子样式的布局管理
UpdateCard更新函数,是遍历,设定的最大卡牌数_countMax,从对象池中,拿到对应类型的卡牌实体,完成初始化,因为节点实体,是使用了Grid LayOut Group进行布局管理,所以实例化出来的卡牌,是有固定间距的格子布局; 然后,再获取拖曳卡牌的DragCardBase逻辑基类,完成它的初始化,还有拖曳结束的回调绑定监听; 还有触发区域的初始化处理; 而GetModels获取,汇总的数据模型,调用的就是,上述提及解析的GetCardsData即可; AddEndListener就是注册,结束函数回调;
右侧的主区域,表现上,对应的是这个节点
对应会挂载的逻辑脚本,是这个; 主要就是俩Action委托函数,分别对应进入区域、离开区域; 然后,就是初始化,通过传参的形式,完成赋值; OnPointerEnter和OnPointerExit,分别是对应,继承的父类 IPointerEnterHandler 和 IPointerExitHandler 的相关函数实现;
右侧,用来存放小卡的,是这个ScrollRect滑动条节点
对应的具体逻辑,初始化函数,也是对各个声明变量,完成初始化即可; EnterArea 和 ExitArea 分别对应,进入区域 和 离开区域 相关的逻辑,会注册到DeckListArea 的_enter和_exit中,分别是对应,根节点,当前区域触发,对应的特定函数;
表现上,拖曳进,打印正常
拖曳出,log打印也正常
之前提及解析的,区域触发的基类接口,有两个实现子类
其中,常规卡牌,也就是大卡的区域触发实现,初始化函数,也是完成,对象池、根节点的赋值; EnterArea进入区域函数,就是从对象池,拿到小卡的实体,同时把当前大卡,卸载,放回对象池,统一管理,再调用根节点的SetDraggingCard函数,完成新的拖曳卡 设定即可; 而ExitArea退出区域函数,就是反着来,从对象池,加载大卡实体,卸载小卡实体回对象池,统一管理,最后也是调用根节点的SetDraggingCard函数,完成新的拖曳卡 设定即可;
小卡的区域触发逻辑,初始化函数,也是跟大卡的区域触发,同理
调用MiniCard的SetGraphicState函数接口,设置背景图片的显隐
小卡的,EnterArea进入区域和ExitArea离开区域,和大卡的,不同; EnterArea进入区域的逻辑,是需要先根据,当前拖曳卡的Size,判断是否为大卡,再进行对象池的卸载处理,这里是用在,小卡拖曳到大卡区域 → 没松开手 → 又拖曳回小卡区域,这时就会触发这个的逻辑,重写卸载大卡回到对象池管理; ExitArea离开区域的逻辑,就是从对象池,加载对应的大卡类型,重新设置到拖曳卡即可;
打断点可知,从小卡拖曳回大卡区域的时候,触发的拖曳卡,从ICard数据中,是拿到特定的大卡类
场景中,最外层的挂载的类是CardLibrary
对应的逻辑,设定最多卡牌数是8张卡,和运行一致; 在Start开始函数,通过Find的形式,拿到各个节点,添加之前提及解析的脚本; 然后初始化,和添加相关结束函数回调即可;