[UI 아키텍처 구성]
● UI 개발을 효율적이고 확장성 있게 관리하기 위해 두 가지 핵심 클래스 도입
■ UIBase - UI 요소의 표준 바인딩 클래스
● 역할
○ Enum을 기반으로 한 UI 바인딩 시스템
○ 타입별로 UI 요소를 캐싱하고 코드에서 안전하게 접근 가능
○ 반복되는 Find와 GetComponent 코드를 제거
● 기본 구조
○ Enum의 이름을 기준으로 UI 요소를 찾아 _objects에 타입별로 캐싱
protected Dictionary<Type, UnityEngine.Object[]> _objects;
○ 예를 들어 enum Texts { Title, Description } 을 BindText(typeof(Texts))로 바인딩하면 Title, Description이라는 이름의 TextMeshProUGUI를 자동으로 연결
protected void BindText(Type type)
{
Bind<TextMeshProUGUI>(type);
}
protected TextMeshProUGUI GetText(int idx)
{
return Get<TextMeshProUGUI>(idx);
}
● 장점
○ UI 이름 변경 시 Enum 기반으로 추적 가능
○ 타입 안정성 확보
○ 씬 구조와 코드 간 결합 최소화
■ UIEventHandler - 모든 UI 이벤트를 단일 클래스에서 처리
● 버튼 클릭 외에도 드래그, 눌림, 뗌, 누르고 있는 동안 등 다양한 입력을 처리하려면 여러 인터페이스를 구현하거나 복잡한 리스너를 붙여야 함
● 이를 해결하기 위해 사용
public class UIEventHandler : MonoBehaviour,
IPointerClickHandler, IPointerDownHandler, IPointerUpHandler,
IDragHandler, IBeginDragHandler, IEndDragHandler
{
public Action OnClickHandler;
public Action OnPressedHandler;
public Action<BaseEventData> OnDragHandler;
...
}
● 핵심 포인트
○ 클릭, 드래그, 누르기 등 모든 UI 입력 이벤트를 하나의 컴포넌트에서 처리
○ Action으로 외부에서 동적으로 이벤트 연결 가능
UIBase.BindEvent(myButtonObject, () => {
Debug.Log("버튼이 눌렸습니다.");
}, type: UIEvent.Click);
○ 눌림 유지 감지는 Update()에서 _pressed를 체크하여 구현
private void Update()
{
if (_pressed)
OnPressedHandler?.Invoke();
}
● 장점
○ UI마다 이벤트 스크립트를 따로 만들 필요 없음
○ 게임 전체에서 이벤트 처리 로직을 일관되게 구성 가능
'내일 배움 캠프 > TIL' 카테고리의 다른 글
| [내일 배움 캠프] 53일차 TIL (0) | 2025.06.24 |
|---|---|
| [내일 배움 캠프] 52일차 TIL (0) | 2025.06.23 |
| [내일 배움 캠프] 50일차 TIL (0) | 2025.06.19 |
| [내일 배움 캠프] 49일차 TIL (0) | 2025.06.18 |
| [내일 배움 캠프] 48일차 TIL (0) | 2025.06.17 |