Unity预设加载出现的问题和滚动组件的使用

今日学习 2020.3.31 星期二

预设加载出来运行时候无法显示的问题

1 可能是误删了Canvas Renderer组件

由于之前对Canvas Renderer并没怎么看过,特意查了下Canvas Renderer,只要是标准UI对象都会有这个组件的,如果不是手动误删了,就不会没有Canvas Renderer组件,所以一整个PartnerList都无法显示就并不是Canvas Renderer组件缺失问题

2 Canvas渲染层次的问题

  • 发现多了Canvas组件,同层次下UI没有Canvas组件

在这里插入图片描述
于是觉得问题出现在这里,可能我之前在Rsources中做预设的时候,没注意到这个问题,于是,我删了Canvas和Graphic Raycaster组件,跟同层次UI一样进行处理。
这样做好像可以将PartnerList预设加载出来,似乎解决了问题

  • 然而事情没有这么简单

如果简单的删除Canvas,将滚动组件跟其他UI放入同一个Canvas进行绘制,在列表滚动时候,其他UI将会重新绘制,导致带来性能的消耗

  • 解决:用两个Canvas,将界面分成两部分分别进行绘制

最后记得设置order in layer
记下笔记 Canvas渲染顺序以及层次关系总结

今日学习 2020.4.1 星期三

用吸附滚动和滚动循环列表实现格子

1 使用吸附滚动

  • 预设需求

在这里插入描述
GridMask 用于设置遮罩显示区域,并具有Rect Mask 2DUI遮罩组件
Cloner 网格源单元,用于被复制的对象,例如,背包系统中每一个物品占据一个格子,这个格子就是网格的单元,就是由Cloner复制得来
Scroll 作为Scroll Rect组件的载体
ContainerScroll Rect主体部分,也就是Content
注意:以上是大部分滚动组件都有的部分
DotListDot的容器,用来存放Dot
Dot是吸附滚动特有的部分,用来记录页面滚动的标记

  • 网格布局

在这里插入图片描述

主要属性

(1)panel 也就是预设中所以单元格的容器Container对象
(2)widthheight,是Container的宽和高,如图所示
width = borderleft +borderright +cellSizeX * 单元格列数 + cspacing * 单元格列数减一
height = bordertop + borderbottom + cellSzieY * 单元格行数 + rspacing * 单元格行数减一
(3)borderleftborderrightbordertopborderbottom是容器panel的边框
(4)cellSizeXcellSizeY单元格cspacingrspacing 是单元格之间的(列)间隙和(行)间隙
(5)column列数,根据实际情况所计算出来的列数

向单元格添加元素过程

添加元素
设置父节点
设置缩放为1

设置显示
设置单位格锚点
设置尺寸
设置单元格位置
修改容器尺寸

  • 更新网格

注意:网格排列方式按照行排列,一行排完了才排下一行
从model中获取数据
按照行划分数据
重置网格布局
设置网格布局中列数column
向单元格对象中添加元素数据
设置容器panel尺寸
注意 :在这里设置尺寸应该按照页数来设置尺寸而不是根据网格布局中长宽来设置
根据页数加载点(dot)列表
根据页数更新页面
设置页面

今日学习 2020.4.2 星期四

  • 问题:为什么会吸附滚动,这种吸附滚动到底是怎么实现的

onValueChanged监听值的变化,并将值保存到currValue
开始拖动Content时回调 (Dot)变化函数
拖动结束实现吸附滚动效果
吸附效果实现
原理:将滚动变化值换成滚动了多少页
实现:计算每一页所占值
currValue减去lastValue(上一次变化值)得到方向
根据方向 页码 计算出此次Content移动的的距离
使用Tween进行吸附滚动

2 使用滚动循环列表

  • 预设需求

对于滚动循环列表来说,就是常规的滚动组件,没有什么多说的。

  • 主要属性

整个容器的属性,跟吸附滚动类似

  • 滚动组件监听事件中OnValueChanged方法
显示区域计算方式

在这里插入图片描述
我们拿网格只有一行情况来做说明
在图中第一个例子中(也就是最上行)
正常显示应该是可视范围内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相关属性(位置,缩放,旋转,瞄点)
(完结)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值