포함 객체
2019. 7. 26. 16:43ㆍ무한 스크롤 뷰
생성에서 필요한 항목을 미리 생성한다고 했습니다. 먼저 이를 구현하는 방법에 대해서 알아보겠습니다.
포함 객체(UIEndlessView)
포함 객체는 스크롤의 설정과 스크롤의 알고리즘과 같은 정보들을 포함한 클래스입니다. 이 포함 객체는 다음과 같은 구성으로 이루어져 있습니다.
생성하기 위한 항목의 경로 |
경로에 해당되는 항목을 생성합니다. |
|
항목의 가로 길이 |
가로, 세로 길이를 토대로 드래그를 하기 위한 최대 영역, 항목의 좌표, 현재 필드의 인덱스, 한 행의 최대 아이템 개수를 구하는데 사용됩니다. |
|
항목의 세로 길이 |
||
스크롤을 하기 위한 알고리즘 |
스크롤 뷰의 드래그를 하기 위한 최대 영역, 항목의 좌표, 현재 행의 인덱스, 한 행의 최대 아이템 개수를 구하고 이를 토대로 항목을 갱신합니다. |
|
뷰와 알고리즘에 필요한 토큰 |
무한 스크롤 뷰와 스크롤 뷰를 처리하는 알고리즘 사이에 파이프 역할을 하는 토큰을 주고 받습니다. 이 토큰을 통하여 초기화, 갱신 처리를 합니다. |
구현
초기화
무한 스크롤 뷰를 초기화할 때 토큰, 스크롤 뷰 알고리즘, 스크롤을 드래그할 때 필요한 충돌체를 초기화합니다.
public void Initialize()
{
if (mToken == null)
{
mToken = new EndlessToken(m_FieldPath, m_ItemPath, m_ItemWidth, m_ItemHeight);
}
if (mScrollView == null)
{
mScrollView = Find<UIEndlessScrollView>(transform);
}
mScrollView.Initialize(mToken);
BoxCollider collider = Find<BoxCollider>(transform);
if (collider != null)
{
collider.size = mScrollView.Panel.GetViewSize();
}
}
|
활성화
초기화가 딱 한번만 호출되는 함수라면 Open은 특정 상황에서 재설정이 필요할 경우 호출되는 함수입니다. 탭을 이동하는 경우나 항목이 추가되거나 판매되었을 경우 호출해서 갱신해줘야합니다.
public void Open(int tapIndex, int itemCount)
{
if (mScrollView != null)
{
mToken.Update(itemCount);
mScrollView.Open(mToken);
}
}
|
전체 코드
using UnityEngine;
public class UIEndlessView : MonoBehaviour
{
public void Initialize()
{
if (mToken == null)
{
mToken = new EndlessToken(m_FieldPath, m_ItemPath, m_ItemWidth, m_ItemHeight);
}
if (mScrollView == null)
{
mScrollView = Find<UIEndlessScrollView>(transform);
}
mScrollView.Initialize(mToken);
BoxCollider collider = Find<BoxCollider>(transform);
if (collider != null)
{
collider.size = mScrollView.Panel.GetViewSize();
}
}
public void Open(int tapIndex, int itemCount)
{
if (mScrollView != null)
{
mToken.Update(itemCount);
mScrollView.Open(mToken);
}
}
private T Find<T>(Transform parent)
{
return parent.GetComponentInChildren<T>();
}
[SerializeField] private string m_FieldPath;
[SerializeField] private string m_ItemPath;
[SerializeField] private int m_ItemWidth;
[SerializeField] private int m_ItemHeight;
private UIEndlessScrollView mScrollView;
private EndlessToken mToken;
}
|