[펌] NGUI 스크롤뷰 아이템 재사용 스크립트
[기존 소스에 일부 코드 수정]
스크롤뷰 아이템을 재사용 할 수 있게 해주는 스크립트 입니다.
인터넷에 이미 몇가지 있는 걸로 알지만, 제가 쓰고 있는 것도 공유해 봅니다.
사용법은 간단합니다.
스크립트에 멤버 변수로 CUIListView를 등록하면 다음과 같이 나옵니다.
Item List - 스크롤뷰가 포함되어 있는 오브젝트.
Item - 리스트로 출력할 프리팹.
Add Row of Column - 0일 경우 View사이즈에 딱 맞게 아이템을 생성해줍니다. 이렇게 되면 아이템 재사용이 제대로 동작하지 않으니, 1이나 2로 지정합니다.
Item Padding - 아이템 사이의 간격입니다. 알아서 다 맞춰주기 때문에 Grid 사용하지 않아도 됩니다.
Scrollbar - 스크롤바가 있을경우 지정해줍시다.
그리고 UIPanel의 offset과 Center 좌표는 0으로 두는게 좋습니다. 패널 위치를 옮기려면 게임오브젝트의 좌표를 움직이는게 좋습니다.
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class CListViewTest : MonoBehaviour
{
public CUIListView m_ListView;
private List m_ItemList = new List();
void Start ()
{
for(int i = 0; i < 500; ++i)
{
m_ItemList.Add(i);
}
m_ListView.OnUpdateItem = OnUpdateItem;
m_ListView.OnGetItemCount = OnGetItemCount;
m_ListView.Init();
}
public void OnUpdateItem(int index, GameObject go)
{
CListViewTestItem item = go.GetComponent<CListViewTestItem>();
item.m_Label.text = index.ToString();
}
public int OnGetItemCount()
{
return m_ItemList.Count;
}
}
public class CListViewTestItem : MonoBehaviour
{
public UILabel m_Label;
}
코드는 위와같이 작성합니다.
OnUpdateItem - 아이템이 갱신될 때 호출됩니다. 나머지 부분은 직접 구현하시면 됩니다.
OnGetItemCount - 리스트의 전체 개수가 필요할 때 호출됩니다.
추가로 Refresh와 Reset, SetFocus 함수가 있는데 필요에 따라서 호출하여 쓰시면 될 것 같습니다.
미구현 기능 및 버그
- 스크롤 바를 클릭해서 뷰를 이동하는 기능. 이 기능을 쓸일이 없고 작업하기도 힘들어서 구현하지 않았습니다.
- 아이템이 한페이지 이상 삭제되었을 경우에 Refresh를 호출하면 뷰 이동이 안되는 버그. (이런 경우에는 Reset을 쓰는 걸 추천).
2015. 4. 15 업데이트
아이템이 리스트에 딱 맞게 설정되어 있을 경우에 스크롤이 되는 버그가 있어서 수정하였습니다.
2015. 5. 26 업데이트
아이템의 크기가 뷰사이즈 보다 작을 경우 드래그가 불가능 하도록 스크롤뷰를 disable 시키는 기능 추가.
SetFocus(0); 을 호출 할 경우 0번째 아이템이 화면 중앙에 위치하는 버그 수정.
출처 : http://kheldon.tistory.com/2
'Unity3D > NGUI' 카테고리의 다른 글
유니티 이미지 최적화 (0) | 2015.06.17 |
---|---|
NGUI Atlas Assetbundle 만들기 및 로드 하기 (0) | 2015.06.17 |
선택된 UI의 좌표(X/Y/Width/Height) 보여주기 (0) | 2015.05.15 |
NGUI UI의 현재 위치 표시하기[수정중] (0) | 2015.05.08 |
NGUI 다양한 해상도 대응하기 (2) | 2015.04.21 |