728x90
GameObject prefab;
ScrollRect scrollRect;
RectTransform content;
RectTransform viewport;
List<GameObject> dataList = new List<GameObject>();
float defaultItemSize = 10;
int currentIndex = 0;
void Create()
{
GameObject obj = Instantiate(prefab);
dataList.Add(obj)
obj.GetComponent<RectTransform>().SetParent(content);
content.GetComponent<RectTransform>().sizeDelta += new Vector2(0, defaultItemSize);
}
void MoveTo()
{
MoveTo(currentIndex);
}
void MoveTo(GameObject data)
{
MoveTo(GetDataIndex(data));
}
void MoveTo(int index)
{
if(IsValidDataIndex(index).Equals(true))
{
Vector2 prevPosition = content.anchoredPosition;
float move = 0.0f;
move = GetMovePosition(index, viewport.rect.height, content.rect.height);
content.anchoredPosition = new Vector2(prevPosition.x, move);
}
}
int GetDataIndex(GameObject data)
{
return dataList.FindIndex(p => p.Equals(data));
}
private bool IsValidDataIndex(int index)
{
return (index >= 0 && index < dataList.Count) ? true : false;
}
private float GetMovePosition(int dataIndex, float viewportSize, float contentSize)
{
float move = 0.0f;
float moveItemSize = defaultItemSize;
float passingItemSize = GetItemSizeSum(dataIndex);
move = passingItemSize;
move -= viewportSize * 0.5f - moveItemSize * 0.5f;
move = Mathf.Clamp(move, 0.0f, contentSize - viewportSize);
move = Mathf.Max(0.0f, move);
return move;
}
private float GetItemSizeSum(int toIndex)
{
return defaultItemSize * toIndex;
}
728x90
반응형
'Unity3D > Unity & C#' 카테고리의 다른 글
Enum FlagsAttribute : enum을 비트 필드(플래그 집합)으로 처리하기 (0) | 2022.04.06 |
---|---|
string 변수에 색상 넣기 (0) | 2022.03.29 |
VideoPlayer 재생 영상 사이즈 아는 법 (0) | 2022.03.18 |
1개의 Color Gradient를 구간으로 나누기 (0) | 2022.03.17 |
Dictionary 배열 사용 (0) | 2022.03.15 |