NGUI——SpringPanel
SpringPanel是NGUI自带的针对ScrollView的tween动画脚本,用于做一些ScrollView的动画,上午组长要求用这个做一个小功能,就是一键让某一行滑动到指定位置。
不多说了,直接上代码:
public class SpringTest : MonoBehaviour {
// 所有item的数组
public GameObject[] items;
// scrollview对象
public GameObject scrollview;
// 要移动到的终点位置,比如让第10个按钮滑动到第1个按钮的位置
Vector3 targetPos;
// 要滑动的按钮的序号,从1开始
public int beginIndex;
// 滑动终点的位置,就是滑动的终点是第几个按钮的位置
public int targetIndex;
// Use this for initialization
void Start () {
// 65是每一个按钮的高度
targetPos = new Vector3(scrollview.transform.localPosition.x, scrollview.transform.localPosition.y + (beginIndex-1 - targetIndex+1) * 65, scrollview.transform.localPosition.z);
}
// Update is called once per frame
void Update () {
if (Input.GetKeyDown(KeyCode.Space))
{
// springPanel是一个脚本,可以不用添加在ScrollView上,代码内部默然添加的。
// 参数一:滑动的对象;参数二:滑动终点;参数三:这里指滑动速度
SpringPanel.Begin(scrollview, targetPos, 5);
}
}
}
代码很简单
--------------------------------------------------做了些扩展
UI节点.png
UIInput.png
UI.png 脚本公共变量.png
public class UITest : MonoBehaviour {
// Use this for initialization
public GameObject[] items;
public UIScrollView sView;
public UIInput label;
// 输入的数字强转的序号
private int index;
// ScrollView初始位置
private Vector3 pos;
// ScrollView滑动强度
private float stren = 10;
// 上一次选中的序号
private int lastIndex;
// UIGrid元素高度
private float height;
// ScrollView剪切视图最多容纳的Button个数
private int maxCout = 5;
void Start () {
for (int i = 0; i<items.Length; i++)
{
items[i].GetComponentInChildren<UILabel>().text = (i+1).ToString();
}
sView.ResetPosition();
height = sView.GetComponentInChildren<UIGrid>().cellHeight;
pos = sView.transform.localPosition;
}
// Update is called once per frame
void Update () {
if (Input.GetKeyDown(KeyCode.Space))
{
string str = label.value;
if (int.Parse(str) != null)
{
index = int.Parse(str);
}
if (index <= 1)
{
index = 1;
}
else if (index>=items.Length)
{
index = items.Length;
}
// 清除上一次选中Btn的变色效果
if (items[lastIndex].GetComponentInChildren<UILabel>().color == Color.red)
{
items[lastIndex].GetComponentInChildren<UILabel>().color = Color.black;
lastIndex = -1;
}
// 控制ScrollView自动滑动。前5个和最后5个,默认不滑动
if (index <= maxCout )
{
SpringPanel.Begin(sView.gameObject, pos, stren);
}
else if(index > items.Length -maxCout)
{
SpringPanel.Begin(sView.gameObject, new Vector3(0, (pos.y + (items.Length - maxCout) * height), 0), stren);
}
else
{
SpringPanel.Begin(sView.gameObject, new Vector3(0, (pos.y + (index - 1) * height), 0), stren);
}
// 清空输入框内容
label.value = null;
// 选中Btn变色
items[index - 1].GetComponentInChildren<UILabel>().color = Color.red;
lastIndex = index - 1;
}
}
}
网友评论