发布时间:2017-04-29责任编辑:朱明 浏览:4028
scrollRect 在unity中是一个使用率极高的部件,对scrollRect中的子项排序也是常有的需求,接下来讲一下自己使用scrollRect的排序的方法,供大家参考,有更好的建议欢迎一起探讨。
首先创建一个list保存滚动层上加载的所有部件 List<GameObject>,所有的操作就根据它来展开。

将所有的子类部件展示到scrollRect,也同时加入到List中。当有排序要求时,使用Sort函数,先对list中项排序,然后使用for循环将排好顺序的list中的项按照新的顺序依次使用SetAsLastSibling()方法,该方法目的是,将该项放到所有项最后一个,依次循环遍历后第一设置的项自然位于第一个位置,即按照list的顺序重新设定好了顺序。以下是代码。
添加一个触发排序的下拉框
void InitDropdown()
{
List<string> itmes = new List<string>();
itmes .Add("获得时间 后-前");
dropdown_sort.AddOptions(itmes );
dropdown_sort.onValueChanged.AddListener(ClickDropdown);
}
void ClickDropdown(int index)
{
switch (index)
{
case 0:
Sort.SetSortOrder(listHeroItems, OrderType.byTime, true);
break;
}
}
//添加项
public void ShowHeros(List<ServerPlayerHero> listHeros)
{
transformHandler.RemoveTransformAllChild(listHeroRoot);
listHeroItems.Clear();
for (int i = listHeros.Count-1; i >= 0; i--)
{
GameObject go = uiHandler.AddItem(listHeroRoot, heroItem);
var item = go.GetComponent<HeroItemView>();
item.Set(listHeros[i]);
listHeroItems.Add(go);//放在链表中,用于排序
}
}
Sort类
//按照list的顺序依次编排顺序 false 是按照正序排列,true 按照倒序排列;
private static void UpdateSortOrder(List<GameObject> listHeroItems,bool isUp)
{
for (int i = 0; i < listHeroItems.Count; i++)
{
if (isUp)
listHeroItems[i].transform.SetAsFirstSibling();
else
listHeroItems[i].transform.SetAsLastSibling();
}
}
//将list按照时间先后排序,即根据id排序
private static void SetSortOrderByTime(List<GameObject> listHeroItems)
{
listHeroItems.Sort(
(GameObject x, GameObject y) =>
{
var itemX = x.GetComponent<HeroItemView>();
var itemY = y.GetComponent<HeroItemView>();
return compareTwoValue(itemX.heroMsg.id, itemY.heroMsg.id);
});
}
战国工作室 供稿