obsidian/笔记文件/2.笔记/UGUI整体解决方案-案例篇_第十三章.md
2025-03-26 00:02:56 +08:00

4.3 KiB
Raw Permalink Blame History

服务类,先弄一个静态单例 Instance用来实例化、获取该服务类

!Pasted image 20240329144653.png

构造单张卡牌的数据模型

!Pasted image 20240329144744.png

调用以上接口,这是当前游戏汇总的卡牌数据初始化

!Pasted image 20240329144818.png

卡牌主页面其中声明的变量包含卡牌总数卡牌对象池卡牌数据列表容器拖曳根节点结束拖曳的回调_onEnd函数

!Pasted image 20240329145053.png

对应的表现实体是这个节点其中是包含Grid LayOut Group组件进行格子样式的布局管理

!Pasted image 20240329145822.png

UpdateCard更新函数是遍历设定的最大卡牌数_countMax从对象池中拿到对应类型的卡牌实体完成初始化因为节点实体是使用了Grid LayOut Group进行布局管理所以实例化出来的卡牌是有固定间距的格子布局 然后再获取拖曳卡牌的DragCardBase逻辑基类完成它的初始化还有拖曳结束的回调绑定监听 还有触发区域的初始化处理; 而GetModels获取汇总的数据模型调用的就是上述提及解析的GetCardsData即可 AddEndListener就是注册结束函数回调

!Pasted image 20240329145650.png

右侧的主区域,表现上,对应的是这个节点

!Pasted image 20240329160802.png

对应会挂载的逻辑脚本,是这个; 主要就是俩Action委托函数分别对应进入区域、离开区域 然后,就是初始化,通过传参的形式,完成赋值; OnPointerEnter和OnPointerExit分别是对应继承的父类 IPointerEnterHandler 和 IPointerExitHandler 的相关函数实现;

!Pasted image 20240329160838.png

右侧用来存放小卡的是这个ScrollRect滑动条节点

!Pasted image 20240329161251.png

对应的具体逻辑,初始化函数,也是对各个声明变量,完成初始化即可; EnterArea 和 ExitArea 分别对应,进入区域 和 离开区域 相关的逻辑会注册到DeckListArea 的_enter和_exit中分别是对应根节点当前区域触发对应的特定函数

!Pasted image 20240329161328.png

表现上,拖曳进,打印正常

!Pasted image 20240329161646.png

拖曳出log打印也正常

!Pasted image 20240329161715.png

之前提及解析的,区域触发的基类接口,有两个实现子类

!Pasted image 20240329161753.png

其中,常规卡牌,也就是大卡的区域触发实现,初始化函数,也是完成,对象池、根节点的赋值; EnterArea进入区域函数就是从对象池拿到小卡的实体同时把当前大卡卸载放回对象池统一管理再调用根节点的SetDraggingCard函数完成新的拖曳卡 设定即可; 而ExitArea退出区域函数就是反着来从对象池加载大卡实体卸载小卡实体回对象池统一管理最后也是调用根节点的SetDraggingCard函数完成新的拖曳卡 设定即可;

!Pasted image 20240329162231.png

小卡的区域触发逻辑,初始化函数,也是跟大卡的区域触发,同理

!Pasted image 20240329162553.png

调用MiniCard的SetGraphicState函数接口设置背景图片的显隐

!Pasted image 20240329162624.png

小卡的EnterArea进入区域和ExitArea离开区域和大卡的不同 EnterArea进入区域的逻辑是需要先根据当前拖曳卡的Size判断是否为大卡再进行对象池的卸载处理这里是用在小卡拖曳到大卡区域 → 没松开手 → 又拖曳回小卡区域,这时就会触发这个的逻辑,重写卸载大卡回到对象池管理; ExitArea离开区域的逻辑就是从对象池加载对应的大卡类型重新设置到拖曳卡即可

!Pasted image 20240329162710.png

打断点可知从小卡拖曳回大卡区域的时候触发的拖曳卡从ICard数据中是拿到特定的大卡类

!Pasted image 20240329164211.png

场景中最外层的挂载的类是CardLibrary

!Pasted image 20240329144915.png

对应的逻辑设定最多卡牌数是8张卡和运行一致 在Start开始函数通过Find的形式拿到各个节点添加之前提及解析的脚本 然后初始化,和添加相关结束函数回调即可;

!Pasted image 20240329164413.png