今天在做一个UGUI的滑动条的时候出了点问题,思路比较混乱
第一个问题是UI上的EventTrigger导致滑动条失效,导致手放在图标上不能滑动
第二个问题是UGUI里不能使用Atlas动态改变图标,后续Instantiate之后的图标我不知道如何处理。
先说下需求分析:
一个动态滑动列表(这个列表最终是需要根据读表来确认多少个)
滑动的数据具有点击事件,还需要一个遮幕去做一个Filled(也就是360顺时逆时转)动画。
然后我就错误的把问题想得太复杂了,做了一个类似于物品管理类的东西。
可能细节上是复杂了很多,但是功能还是实现了。
如果有更多的拓展的话,个人认为还是比较好拓展的。
但是
先分享unity里面的一些操作吧
1.建立一个image,挂载Scroll Rect 与Mask脚本
2.子节点建立一个gameobject,挂载Grid Layout Group(自动排序),Content Size Fitter(自动缩行)
3.在gameobject的字节下点 就是放置各种需要滑动的东西了,很显然这里的东西是有序的,所以我们一般只建立一个,剩下的动态加载就行。
在一个上面挂载DragScrollRect脚本,来解决第一个问题,至于拖动的问题,也可以自己寻找节点。
using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class DragScrollRect : MonoBehaviour , IBeginDragHandler,IEndDragHandler,IDragHandler
{
[HeaderAttribute("要拖动的ScrollRect")]
public ScrollRect DragScroll;
public void OnBeginDrag(PointerEventData eventData)
{
if (DragScroll != null)
{
DragScroll.OnBeginDrag(eventData);
}
}
public void OnEndDrag(PointerEventData eventData)
{
if (DragScroll != null)
{
DragScroll.OnEndDrag(eventData);
}
}
public void OnDrag(PointerEventData eventData)
{
if (DragScroll != null)
{
DragScroll.OnDrag(eventData);
}
}
}
接下来说下UGUI的Atlas,拿的是别人写好的一个东西, 所以我这里也不上源码了。 没什么意义,我会打包到网盘。
1.首先准备大图,可以用TP打包好
2.右键大图,Create 点击创建当前选择的图集,然后把生成的Atlas放在Resouce下,可以用Resouce加载
3.然后调用UIAtlas里面的SetSprite方法就能改变其图片了。
例如:atlas.SetSprite(ref image, id.ToString());
第一个参数是图片,第二个是他对应的名字。
UGUI Atlas的网盘地址: