今日学习 2020.3.31 星期二
预设加载出来运行时候无法显示的问题
1 可能是误删了Canvas Renderer组件
由于之前对Canvas Renderer并没怎么看过,特意查了下Canvas Renderer,只要是标准UI对象都会有这个组件的,如果不是手动误删了,就不会没有Canvas Renderer组件,所以一整个PartnerList都无法显示就并不是Canvas Renderer组件缺失问题
2 Canvas渲染层次的问题
于是觉得问题出现在这里,可能我之前在Rsources中做预设的时候,没注意到这个问题,于是,我删了Canvas和Graphic Raycaster组件,跟同层次UI一样进行处理。
这样做好像可以将PartnerList预设加载出来,似乎解决了问题
如果简单的删除Canvas,将滚动组件跟其他UI放入同一个Canvas进行绘制,在列表滚动时候,其他UI将会重新绘制,导致带来性能的消耗
最后记得设置order in layer
记下笔记 Canvas渲染顺序以及层次关系总结
今日学习 2020.4.1 星期三
用吸附滚动和滚动循环列表实现格子
1 使用吸附滚动
GridMask 用于设置遮罩显示区域,并具有Rect Mask 2DUI遮罩组件
Cloner 网格源单元,用于被复制的对象,例如,背包系统中每一个物品占据一个格子,这个格子就是网格的单元,就是由Cloner复制得来
Scroll 作为Scroll Rect组件的载体
Container 是Scroll Rect主体部分,也就是Content
注意:以上是大部分滚动组件都有的部分
DotList是Dot的容器,用来存放Dot
Dot是吸附滚动特有的部分,用来记录页面滚动的标记
主要属性
(1)panel 也就是预设中所以单元格的容器Container对象
(2)width和height,是Container的宽和高,如图所示
width = borderleft +borderright +cellSizeX * 单元格列数 + cspacing * 单元格列数减一
height = bordertop + borderbottom + cellSzieY * 单元格行数 + rspacing * 单元格行数减一
(3)borderleft 、borderright、bordertop 和 borderbottom是容器panel的边框
(4)cellSizeX和cellSizeY是单元格的宽和高,cspacing和rspacing 是单元格之间的横(列)间隙和竖(行)间隙
(5)column列数,根据实际情况所计算出来的列数
向单元格添加元素过程
添加元素
设置父节点
设置缩放为1
设置显示
设置单位格锚点
设置尺寸
设置单元格位置
修改容器尺寸
注意:网格排列方式按照行排列,一行排完了才排下一行
从model中获取数据
按照行划分数据
重置网格布局
设置网格布局中列数column
向单元格对象中添加元素数据
设置容器panel尺寸
注意 :在这里设置尺寸应该按照页数来设置尺寸而不是根据网格布局中长宽来设置
根据页数加载点(dot)列表
根据页数更新页面
设置页面
今日学习 2020.4.2 星期四
onValueChanged监听值的变化,并将值保存到currValue中
开始拖动Content时回调 点(Dot)变化函数
拖动结束实现吸附滚动效果
吸附效果实现
原理:将滚动变化值换成滚动了多少页
实现:计算每一页所占值
由currValue减去lastValue(上一次变化值)得到方向
根据方向 页码 计算出此次Content移动的的距离
使用Tween进行吸附滚动
2 使用滚动循环列表
对于滚动循环列表来说,就是常规的滚动组件,没有什么多说的。
整个容器的属性,跟吸附滚动类似
显示区域计算方式
我们拿网格只有一行情况来做说明
在图中第一个例子中(也就是最上行)
正常显示应该是可视范围内1234这四个,但是在计算起始位置时候,正因为多减了一个数字1,导致计算得到小于1且大于数字0的浮点数,向下取整为0,也就是在实际显示中1那个物体左边那个0物体会作为起始位置
计算终止位置时候,正因为多加一个数字1,导致计算得到大于数字1且小于数字2的浮点数,向上取整为2,加上显示区域四个单位得到6,也就是实际显示中4那个物体右边第二个那个6物体会作为终止位置
剩下两种情况计算结果如图所至
都是在实际显示左右多出一两项,这样做的目的在于拖动过快
通过观察计算,我们发现,在左边最多会多一个,右边由于+1向上取整会多两个
今日学习 2020.4.3 星期五
昨日分析有问题
我在在分析始末位置的时候,忽视Lua中table索引是从1开始的,虽然我们计算beginIndex等于0,但会经过一次转换变成1,也就是从第一个物体开始
重新绘制如下图所示
我们发现在左右会多一个物体作为始末位置,如蓝色部分,但不会跟昨天想的那样右边多出两个
我们计算分析一下
除了特殊情况下,物体1都是我们计算得到的其实位置,最极限位置是图中第四行,
我们将实际显示区域的宽度看成0,此时右边最大终止位置也是三,不存在右边多两个位置
3 为什么滚动循环列表用的比吸附滚动的多
吸附滚动:有多少组数据,就会复制多少次游戏对象并New出单元格对象
滚动循环列表:只会比实际显示出来的多出几项用复制和New单元格对象
滚动循环列表封装得更好,使用起来更加方便
4 复制游戏对象的常用处理方式
设置父节点
设置Transform Rect相关属性(位置,缩放,旋转,瞄点)
(完结)