码迷,mamicode.com
首页 > 其他好文 > 详细

UGUI循环滚动(竖)

时间:2018-04-02 20:14:01      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:private   normal   tran   inter   gui   pointer   ugui   float   current   

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using System.Collections.Generic;

public class Scroll_Vertical : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
public Transform itemParent;
public GameObject itemPrefab;

public Vector3 normalScale;
public Vector3 selectedScale;

public Vector2 cellSpace;
public int itemCount;
public int showCount = 8;

private int circleNumber;
private Vector2 halfCellSpace;

private float circleSpace;
private float startPosition;
private float endPosition;

private GameObject currentGo;
private List<GameObject> items;
private List<float> centerPositions;

private void Awake()
{
circleNumber = (showCount / itemCount) + 1;
halfCellSpace = cellSpace * 0.5f;

RectTransform rt = (RectTransform)itemParent;
startPosition = 0;
circleSpace = cellSpace.y * itemCount;
endPosition = circleNumber * circleSpace - rt.rect.height;

items = new List<GameObject>();
centerPositions = new List<float>();
}

private void Start()
{
for (int i = 0; i < circleNumber; i++)
{
for (int j = 0; j < itemCount; j++)
{
GameObject go = Instantiate(itemPrefab, itemParent) as GameObject;
go.GetComponentInChildren<Text>().text = "item_" + j;
go.name = "item_" + i.ToString() + j.ToString();
float pos = -(i * circleSpace + cellSpace.y * j);
go.transform.localPosition = new Vector3(halfCellSpace.x, pos - halfCellSpace.y, 0);
items.Add(go);
centerPositions.Add(-pos);
}
}
CheckSelect();
}

public void OnBeginDrag(PointerEventData eventData)
{

}

public void OnDrag(PointerEventData eventData)
{
if (eventData.delta.y > 0)
{
if (itemParent.transform.localPosition.y >= endPosition)
{
float pos = endPosition - circleSpace;
itemParent.localPosition = new Vector3(0, pos, 0);

}
else
{
itemParent.localPosition += new Vector3(0, eventData.delta.y, 0);
}
}
else
{
if (itemParent.transform.localPosition.y <= startPosition )
{
float pos = startPosition + circleSpace;
itemParent.localPosition = new Vector3(0, pos, 0);
}
else
{
itemParent.localPosition += new Vector3(0, eventData.delta.y, 0);
}
}
CheckSelect();
}

public void OnEndDrag(PointerEventData eventData)
{
int lastPos = CheckSelect();
itemParent.localPosition = new Vector3(0, centerPositions[lastPos], 0);
}

public int CheckSelect()
{
float pos_y = itemParent.transform.localPosition.y;
int index = 0;

for (int i = 0; i < centerPositions.Count; i++)
{
if (centerPositions[i] + halfCellSpace.y >= pos_y &&
centerPositions[i] - halfCellSpace.y <= pos_y)
{
index = i;
break;
}
}

if (currentGo != null)
{
currentGo.transform.localScale = normalScale;
}
currentGo = items[index];
currentGo.transform.localScale = selectedScale;

return index;
}
}

UGUI循环滚动(竖)

标签:private   normal   tran   inter   gui   pointer   ugui   float   current   

原文地址:https://www.cnblogs.com/Joke-crazy/p/8696200.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!