注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天涯倦客的博客

祝福你朋友永远快乐!

 
 
 

日志

 
 

UGUI制作动态滑动列表scrollview  

2017-04-26 10:12:04|  分类: U3D |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

本篇文章我们来学习下在UGUI即unity new ui中制作scrollview来实现简单的任务系统ui布局,下面开始,

先看下效果图:

scrollview

UI布局是这样滴:

scrollview

scrollview

其中Image的Scroll Rect组件的Content赋值为Content,在这里,我们的Content是一个空物体,它的大小就是上图那个方框的大小。这里有两点很重要:

1.Content的Pivot的Y必须设置为Y的最大值,就像这样:

这是为什么呢?其实动态滑动列表的原理主要就是动态改变Content的Height,当中心点处于最顶的位置时,就能保证顶部位置不变,只有下部的位置在变化。假如中心点处于中间位置,那么改变Height,两边都会变化。

2.列表项的设置,要注意列表项预制体的Anchor Presets和Pivot,因为它们都会影响预制体实例化的位置,这里为了方便计算,我设置Anchor Presets为top-center,Pivot为(0.5,1),

贴上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
 
public class TaskPanel : MonoBehaviour {
 
public static TaskPanel instance;
public List<GameObject> items = new List<GameObject>();
 
public GameObject content;//内容
public Vector2 contentSize;//内容的原始高度
 
public GameObject item;//列表项
public float itemHeight;
public Vector3 itemLocalPos;
 
void Awake()
{
if (!instance)
instance = this;
else
Destroy(this);
}
 
void Start()
{
content = GameObject.Find("Content");
contentSize = content.GetComponent<RectTransform>().sizeDelta;
 
item = Resources.Load("Item") as GameObject;
itemHeight = item.GetComponent<RectTransform>().rect.height;
itemLocalPos = item.transform.localPosition;
}
 
//添加列表项
public void AddItem()
{
GameObject a = Instantiate(item) as GameObject;
a.transform.parent = content.transform;
a.transform.localPosition = new Vector3(itemLocalPos.x, itemLocalPos.y - items.Count * itemHeight, 0);
items.Add(a);
 
if (contentSize.y <= items.Count * itemHeight)//增加内容的高度
{
content.GetComponent<RectTransform>().sizeDelta = new Vector2(contentSize.x, items.Count * itemHeight);
}
}
 
//移除列表项
public void RemoveItem(GameObject t)
{
int index = items.IndexOf(t);
items.Remove(t);
Destroy(t);
 
for (int i = index; i < items.Count; i++)//移除的列表项后的每一项都向前移动
{
items[i].transform.localPosition += new Vector3(0, itemHeight, 0);
}
 
if (contentSize.y <= items.Count * itemHeight)//调整内容的高度
content.GetComponent<RectTransform>().sizeDelta = new Vector2(contentSize.x, items.Count * itemHeight);
else
content.GetComponent<RectTransform>().sizeDelta = contentSize;
}
}
  评论这张
 
阅读(19)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017