UGUI整体解决方案-案例篇_第八章
回到单个照片实体逻辑类,其中CanMove获取器,调用的是,透明特效FadeEffect对应的布尔判断; 还有两个Action事件委托,分别会绑定,队列容器,增删中心id的相关逻辑操作;
设置照片实体,名称接口
对应表现
单个照片实体,相关数据的重置接口
添加和移除,中心id队列容器,相关逻辑
通过位置信息和缩放尺寸,配合MathF.Sqrt和MathF.Pow数学函数,完成影响半径的计算赋值,主要用于透明特效作用范围
获取周边照片实体的id,需要判断,当前节点,是否为左右边界Border,再加到NeighborIds队列容器即可
照片实体的初始化函数,声明的各个变量,完成初始化赋值; 调用上述函数,命名照片,拿到周边照片实体id队列容器,再在自身新增FadeEffect透明特效组件,计算得到,影响半径Radius,配合完成初始化; FluctuateEffect缩放特效,同理;
批量移动照片实体的相关逻辑,是这里; 一个isMove布尔判断,是否要整体移动; centerId是中心节点队列容器,也是通过传参赋值; items容器,通过传参拿到,总的照片实体队列容器; itemPos和changePos都是配合,用于照片墙的整体移动; Init初始化函数,对以上变量,进行初始化赋值即可;
重置位置信息,是将照片实体的锚点坐标,跟屏幕尺寸相关,配合赋值即可
有几个工具方法,分别是配合中心节点,影响范围,使用MathF.Sqrt和MathF.Pow换算,得到各个X和Y轴的,最大/小数值
设置状态的相关逻辑,中心节点centerPos是根据照片实体节点的锚点坐标anchoredPosition直接赋值,然后配合实体的Radius范围限制,使用上述的工具方法,得到最大和最小的坐标,以中心节点centerPos为key,添加到 CircleXMax 和 CircleXMin 字典容器即可
整体移动的相关逻辑; 遍历所有的照片实体item,提取其中的 CircleXMax 和 CircleXMin 数据容器,对应中心节点的坐标,比较判断,对changePos移动坐标,完成修改和赋值
后半部分逻辑,继续判断,修改changePos移动位置坐标相关即可
初始化位移逻辑InitMove就是调用了,上述相关逻辑; 更新函数中,按W可以重置移动,isMove布尔判断,是否要调用整体移动函数;
运行游戏,按w是可以重新移动的,表现正常
回到照片墙最外层,管理逻辑; 纵横两个row和column是配合,屏幕宽高,和单个照片的预制体Prefab宽高,进行计算,初始位置亦然,参考Mathf.FloorToInt; 两个遍历循环,分别遍历row和column,实例化多个照片实体,添加PhotoWallItem组件,Init初始化; 设置锚点坐标,使用DOAnchorPosX,完成初始化移动即可;
逻辑的后半部分,就是把Item逻辑的 _addCenterAction 和 _removeCenterAction 两个委托逻辑,完成绑定; 在遍历完之后,左右边界Border也是基于index和column列参数,得到的;
外部照片墙还有一个GetItem函数接口,是通过Index索引,从总的照片队列容器,拿到特定照片实体即可