区域触发逻辑的基类接口,其中有三个函数:初始化、进入区域、退出区域

这是拖曳的根节点,声明的变量中,除了卡牌基类,当前拖曳卡牌实体CurDraggingCardTrans 和 当前拖曳区域 CurAreaAction ,还有一个卡牌实体 拖曳逻辑的,基类 CurDragComponent

各个函数,调用ICard基类的,设置射线检测开关,初始化卡牌的逻辑,是设置父物体,还有重置局部坐标; Clear就是简单的设null清空了; 在拖曳过程中,实例化出来的拖曳卡牌,会以根节点作为父节点,跟随一起移动;

设置一张新的拖曳卡片,具体逻辑,就是通过各个传参,完成当前拖曳卡牌的,相关赋值、初始化操作; 外部调用接口是SetDraggingCard即可;

表现上,根节点逻辑DraggingRoot会挂载在这里

卡牌实体,拖曳的相关逻辑基类,声明对象池管理类 CardPoolMgr,和 ICard 卡牌基类接口,DraggingRoot拖曳的根节点,还有_onEnd是结束拖曳的Action事件回调; 其中开始拖曳的相关逻辑OnBeginDrag,就是把 拖曳根节点 DraggingRoot 的绝对位置,使用鼠标位置 Input.mousePosition 赋值即可;

剩余的函数体,分别是拖曳过程中,实时修改拖曳根节点的锚点坐标; 结束拖曳的时候,调用OnEndDrag即可; 还有AddEndListener函数,就是完成,拖曳结束函数_onEnd的回调赋值;

拖曳出来的卡牌,会有两种来源,表现

分别对应拖曳基类的,两个继承子类

大卡的拖曳具体逻辑; 其中,重写,开始拖曳的相关逻辑,是调用了,对象池管理类的Spwan加载函数,通过卡牌的Type类型,拿到对应的卡牌实体,再设置到拖曳根节点即可; 重写结束拖曳的相关逻辑,就是调用,对象池管理类的Despwan卸载资源即可;

右侧小卡的,实体拖曳逻辑,也是继承自 DragCardBase父类的子类,其中的_miniCard,是通过Init初始化函数,获取实体挂载的MiniCard组件即可; Direction是方向枚举,分水平和纵向; 在开始拖曳函数中,调用MiniCard的SetGraphicState函数,将小卡的背景图片,设置为显现,方向默认是None,_content组件是父物体的RectTransform组件;

对应的表现,是一个纵向布局Group组

继续看,小卡拖曳逻辑的其他函数,JudgeDirection是根据 PointerEventData 的 delta的x和y比较,完成方向的赋值; ExcuteDrag函数的相关逻辑,就是根据不同的方向,调用不同的逻辑,其中水平方向移动,就会调用父类的OnDrag逻辑,如果是纵向移动,就调用父物体_content的Dotween动画插件的 DOAnchorPosY函数接口,纵向移动即可;

父类的OnDrag函数接口,是之前提及的,根据拖曳数据,修改拖曳根节点的锚点坐标即可

回到小卡拖曳的具体逻辑,拖曳中的逻辑重写,就是调用上述的俩逻辑即可