UIBook中,还有一个FlipAni函数,是调用上个章节的翻页动画协程,和重置状态逻辑 ![[Pasted image 20240328165936.png]] 这是翻页中的逻辑,继承自Page页面基类,开始翻页BeginDragPage的时候,才调用SetActivevState将它设置为显示,设置一下锚点和坐标旋转等信息; 还有,对应的Shadow组件,Init初始化; SetShadowFollow设置阴影,跟随逻辑,ResetShadowData是同名的,阴影重置位置信息逻辑调用; ![[Pasted image 20240328170308.png]] 对应使用到的表现,是这俩 ![[Pasted image 20240328170410.png]] ![[Pasted image 20240328170437.png]] 对应的阴影也是Child(0) ![[Pasted image 20240328170858.png]] ![[Pasted image 20240328170920.png]] 拖曳的抽象逻辑基类,声明了需要用到的,各个变量,构造函数,完成初始化,有左右翻页拖曳,两个继承的子类 ![[Pasted image 20240328171149.png]] ![[Pasted image 20240328171320.png]] 有三个函数,开始拖曳函数,是设定裁切mask蒙版的锚点,鼠标的点击坐标赋值; 然后拖曳中的,前页和背面页,分别是TheDraggingPage声明的_frontPage和_backPage,调用上述提及解析的,他们的BeginDragPage开始拖曳函数即可; GetClippingMaskPivot和GetPagePivot是两个抽象函数,在两个继承子类,会重写,分别是获取裁切mask蒙版的锚点,和设计页面的锚点; ![[Pasted image 20240328171237.png]] 左右重写 ![[Pasted image 20240328171719.png]] ![[Pasted image 20240328171737.png]] 背面页,翻页过程中,左右也是有区别的,这里是获取,不同的背面页翻页,对应的角度偏转,也是有两个继承子类的重写 ![[Pasted image 20240328171855.png]] 左右重写; 翻左页的时候,表现上,会旋转180°; ![[Pasted image 20240328172008.png]] ![[Pasted image 20240328172019.png]] 更新背页的逻辑UpdateBackSide,局部坐标转世界坐标,配合,当前被拖动的书页顶点位置 CurrentPageCorner,反三角函数得到角度,调用上述的左右翻页,偏转角度处理,对背页的旋转,完成修改赋值即可,参考[[Unity——Mathf.Atan和Atan2的异同]]、[[Mathf.Rad2Deg]] ![[Pasted image 20240328172259.png]] 更新裁切mask页面的相关逻辑,调用了,之前提及解析的UIBook里面CulculateFoldAngle得到,mask偏转角度,赋值计算即可; 其中调用的抽象函数GetBookCorner,获取书本角落逻辑,也是左右有不同的逻辑重写; ![[Pasted image 20240328172621.png]] ![[Pasted image 20240328172745.png]] 左右 ![[Pasted image 20240328172832.png]] ![[Pasted image 20240328172842.png]] 拖曳中的更新函数,获取到,当前鼠标点击坐标; 前背两页,分别设置裁切mask和书籍本体,作为服务体,参考[[worldPositionStays]]; 不断配合鼠标点击位置,更新、页面拖曳的角落Corner; 裁切页面,背页,也会不断更新,拖曳位置; 前页还会通过SetAsFirstSibling设置,层级遮挡,参考[[SetAsLastSibling用法]]; ![[Pasted image 20240328172927.png]] 拖曳的结束逻辑,会校验,书页的角落顶点位置,最终合法; 再调用之前解析提及的,FlipAni函数,调用协程,完成松开手的动画播放; ![[Pasted image 20240328173818.png]] 回到UIBook管理类,在开始函数中,还会有InitData初始化数据,对应的调用 ![[Pasted image 20240328174049.png]] 具体逻辑,是完成书籍数据模型的实例化; 调用资源加载函数Resources.LoadAll,把Book目录下的所有图片资源,加载到_bookSprites图片数组; 在游戏开始的时候,会把书籍的sizeDelta尺寸,设置成书页的width和height; 对BookModel数据模型,各个字段,调用工具函数,完成赋值即可; ![[Pasted image 20240328174133.png]] 继续,对角线,页面宽度等字段,也是完成初始化赋值; 正在拖曳页面的阴影,使用InitShadow完成初始化即可; ![[Pasted image 20240328174409.png]]