UGUI整体解决方案-案例篇_第九章
这个场景,对应的是,翻书特效,运行的初始效果,还有翻书效果,表现
逻辑上,这个翻书效果的实现,主要是通过,点击交互,配合Mask遮罩,实现翻书特效,这是书籍的数据模板类
后续的变量声明
书籍页面上,会有阴影,对应的逻辑类,是这个; 声明的变量里面,有位置信息、图片和默认的颜色,这里是淡灰; 初始化函数,就是对上述的变量,进行赋值即可; Follow函数,就是阴影界面本身,绝对坐标和旋转,跟随移动,后续会跟随裁切的mask组件,同步位置信息; ResetShadowData函数,就是重置锚点坐标和旋转;
这是拖曳翻页的逻辑类,其中包含:开始拖曳翻页、翻页中、结束拖曳翻页,三个Action委托的赋值
这是页面的基类,声明的Func委托事件,是用来根据索引,获得书籍页面图片; 还有其余几个变量:页面图片、唯一id标识、配套对应阴影、位置信息; Init初始化函数,对各个组件,进行初始化赋值即可;
几个函数,分别是从图片容器,通过id拿到当前图片信息; 设置显隐,设置父类物体;
这是场景书籍,最外层,挂载的,统一管理逻辑类
声明的各个变量
以左边书籍页面,当前id作为基准,弄一个获取器
InitComponent函数,初始化各个组件,是通过Find名字的形式,找到对应的节点,然后添加对应的组件
剩余的,汇总组件初始化逻辑,还有调用各个组件的Init初始化
几个函数,分别是获取Mask裁切组件、世界坐标转局部坐标、局部坐标转世界坐标
更新ID的逻辑,就是以左边页面的唯一ID,作为基准,加上特定索引,获取左页_leftPage、正在翻的左页_leftSideOfPage、正在翻的右页_rightSideOfPage、右页_rightPage
移动结束后,调用的函数是AniEnd,是用来判断,是否为翻页到左边,当前左页id,递增2; JudgeCornerIsLeft是检测,是否为左边的角落,通过跟书籍数据模型的BottomCenter字段的x坐标,比较即可; GetClickPos是获取到,目前点击的位置,如果正在拖曳,就获取鼠标的mousePosition,调用上述函数,世界坐标转成局部坐标; 否则,直接调用数据模型的ClickPoint字段即可;
因为GetClickPos唯一的调用位置,就是对ClickPoint进行赋值
计算底部中心的坐标,通过数据模型的页面宽度,配合三角函数计算即可
计算上部中心的坐标,也是同理,调用的是数据模型的,对角线PageDiagonal字段,计算即可
计算拖曳中的页面角落Corner的拖曳位置极限,就调用了上述的俩函数,因为不能无限拖曳页面本体,需要底部和顶部的Limit限制逻辑
配合页面底部中心点坐标的x,还有书籍角落坐标的x,计算得到偏移数值,会用于计算,裁切mask页面的偏转角度
也就是这个,通过LimitOffsetX和反三角函数Mathf.Atan,计算得到偏移角度,参考Unity——Mathf.Atan和Atan2的异同、Mathf.Rad2Deg
回到UIBook管理类,ResetState函数体,会调用更新左页id,还有页面的显隐,都隐藏起来即可; PageAni协程,使用书籍数据的ClickPoint翻页位置字段,配合WaitUntil函数,用在翻页结束之后的,通过传参得到,书页最终的目标位置target,实现结束时候的,动画效果;