UIBook中,还有一个FlipAni函数,是调用上个章节的翻页动画协程,和重置状态逻辑

这是翻页中的逻辑,继承自Page页面基类,开始翻页BeginDragPage的时候,才调用SetActivevState将它设置为显示,设置一下锚点和坐标旋转等信息; 还有,对应的Shadow组件,Init初始化; SetShadowFollow设置阴影,跟随逻辑,ResetShadowData是同名的,阴影重置位置信息逻辑调用;

对应使用到的表现,是这俩

对应的阴影也是Child(0)

拖曳的抽象逻辑基类,声明了需要用到的,各个变量,构造函数,完成初始化,有左右翻页拖曳,两个继承的子类

有三个函数,开始拖曳函数,是设定裁切mask蒙版的锚点,鼠标的点击坐标赋值; 然后拖曳中的,前页和背面页,分别是TheDraggingPage声明的_frontPage和_backPage,调用上述提及解析的,他们的BeginDragPage开始拖曳函数即可; GetClippingMaskPivot和GetPagePivot是两个抽象函数,在两个继承子类,会重写,分别是获取裁切mask蒙版的锚点,和设计页面的锚点;

左右重写

背面页,翻页过程中,左右也是有区别的,这里是获取,不同的背面页翻页,对应的角度偏转,也是有两个继承子类的重写

左右重写; 翻左页的时候,表现上,会旋转180°;

更新背页的逻辑UpdateBackSide,局部坐标转世界坐标,配合,当前被拖动的书页顶点位置 CurrentPageCorner,反三角函数得到角度,调用上述的左右翻页,偏转角度处理,对背页的旋转,完成修改赋值即可,参考Unity——Mathf.Atan和Atan2的异同Mathf.Rad2Deg

更新裁切mask页面的相关逻辑,调用了,之前提及解析的UIBook里面CulculateFoldAngle得到,mask偏转角度,赋值计算即可; 其中调用的抽象函数GetBookCorner,获取书本角落逻辑,也是左右有不同的逻辑重写;

左右

拖曳中的更新函数,获取到,当前鼠标点击坐标; 前背两页,分别设置裁切mask和书籍本体,作为服务体,参考worldPositionStays; 不断配合鼠标点击位置,更新、页面拖曳的角落Corner; 裁切页面,背页,也会不断更新,拖曳位置; 前页还会通过SetAsFirstSibling设置,层级遮挡,参考SetAsLastSibling用法

拖曳的结束逻辑,会校验,书页的角落顶点位置,最终合法; 再调用之前解析提及的,FlipAni函数,调用协程,完成松开手的动画播放;

回到UIBook管理类,在开始函数中,还会有InitData初始化数据,对应的调用

具体逻辑,是完成书籍数据模型的实例化; 调用资源加载函数Resources.LoadAll,把Book目录下的所有图片资源,加载到_bookSprites图片数组; 在游戏开始的时候,会把书籍的sizeDelta尺寸,设置成书页的width和height; 对BookModel数据模型,各个字段,调用工具函数,完成赋值即可;

继续,对角线,页面宽度等字段,也是完成初始化赋值; 正在拖曳页面的阴影,使用InitShadow完成初始化即可;