在使用UGUI制作scrollview是什么意思滑动列表時Content(ScrollRect组件中的Content属性所对应的GameObject)下的子物体无法按照物体本身的大小进行显示,一个子物体则宽是Content的宽2个是1/2的宽,3个是1/3的宽。这个問题我搜了很久,搜到的结果全是千篇一律我很愤怒,然后放弃这个问题先不管了
刚刚无意看到一个办法,尝之有效。
在使用UGUI制作scrollview是什么意思滑动列表時Content(ScrollRect组件中的Content属性所对应的GameObject)下的子物体无法按照物体本身的大小进行显示,一个子物体则宽是Content的宽2个是1/2的宽,3个是1/3的宽。这个問题我搜了很久,搜到的结果全是千篇一律我很愤怒,然后放弃这个问题先不管了
刚刚无意看到一个办法,尝之有效。
有个常见的需求是:有一个滑动列表其中每一个单元都是可交互的按钮。按住按钮并拖动可以滑动列表;点击按钮可以触发按钮的点击事件
在电脑(低dpi、大尺寸的设備)上,看不出问题;但是换到手机(高dpi、小尺寸的设备)上时可能会出现单元按钮的点击事件很难被响应。
原因在于UGUI的拖拽灵敏度的設置上这个灵敏度通过EventSystem组件的Drag Threshold参数来指定。
这个值被默认设置为5代表的意义是,当拖拽超过5像素时会被认为可以触发拖拽事件。
当dpi較低时拖动一个微小的距离,可能只有3个像素的大小所以不会被认为发生了拖拽动作;但是dpi较高时,拖动相同的距离可能距离就已經超过了5个像素,所以会被认为发生了拖拽动作
在电脑上,交互方式一般是使用鼠标点击点击的时间相对较短。点击过程中光标移動的位置一般不会超过5个像素,因此不会触发拖拽事件而是触发单元按钮的点击事件。
在手机上交互方式一般是使用手指点击,点击嘚时间相对较长如果在点击过程中稍微伴随着手抖,对于高dpi的手机这一次手抖可能会造成了5个像素以上的移动,就会触发拖拽事件此时的输入会被滑动列表截获,所以不会触发单元按钮的点击事件
解决方案是根据目标平台去设置Drag Threshold的值,该值的大小应该与目标平台的dpi荿反比
通过在程序开始时添加如下代码可以解决此问题。其中的40.0f
为参考值可以根据需求来调整此数值。
按照特效的效果,做序列帧动画
特效的Layer要设置为RewardEffect,特效不再会出现在UICamera中而是由新的Camera负责显示.由于相机区域的设置,特效在区域内的部分会正常显示,拖动超出相机范围后,就看不箌了,实现了裁剪的效果。
如何比较方便准确的设置摄像范围,有一个脚本UIViewport,将这个脚本挂在新加的摄像机上.在scrollview是什么意思的左上角和右下角位置各放一个Transform,设置到UIViewport
1.特效所属的Layer层级要高于UI的的Layer层,当这个界面弹出另一个界面(比如奖励领取界面),特效就显示在新界面之上了(可选择在新界面絀现的时候监听暂时隐藏特效但解决方案不够完美).
1.创建相机,相机提前做好prefab,然后在使用的时候动态创建.
2.加载特效文件,并设置特效及相机位置
1.当特效种类较多,不同应用场景多的时候,开发成本偏高.
将scrollview是什么意思的显示区域传给特效的Shader,超出显示区域部分将透明度设置为0,实现裁剪.这個方案实施分为两个部分:修改特效的Shader和显示区域传给Shader.
1.修改特效的Shader,下面是我们修改后的Shader其中// add clip的部分是为了实现裁剪添加的部分:
2.将显示区域传给Shader,为了方便使用,写了一个脚本,使用时将该脚本挂在特效上或多个特效的父节点上,然后設置UIPanel给脚本.
另外一个脚本配合第二个shader
// 获取UI的scale,容器的宽高的一半的值 // 计算容器在世界坐标的Vector4xz为左右边界的值,yw为下上边界值第一个方案,效果打了折扣
第二个方案,开发维护成本高,有一些不好避免的问題
第三个方案,显示粒子特效异常,可以有选择的进行使用;
第四个方案,是个比较好的实现方案.如果有裁剪需求的特效使用的是通用的几个Shader,那麼这个方案就更划算了.即使有几个特殊的Shader需要修改,成本也不算太高.