코딩의 신 36

김동관·2025년 11월 21일

오늘 한 일

오늘은 Stack 기반 UI 흐름을 배웠습니다.
스택(Stack) 기반으로 화면 전환과 팝업을 관리하는 Unity UI 프레임워크입니다.
UIManager와 UIView를 중심으로, 다음과 같은 요구사항을 해결하기 위한 구조입니다.

Stack 기반 UI 흐름
UIManager는 내부에 Stack를 가지고 있고,
현재 화면/팝업들의 상태를 “접시 쌓기”처럼 관리합니다.

Push = 새 화면을 위에 쌓는 동작
Pop / ClosePopup / PopTo / PopAll = 스택에서 내려가거나 정리하는 동작

UIView는 Canvas 아래에 존재하는 하나의 화면/팝업 단위입니다.
Show()

GameObject를 활성화 (SetActive(true))
최상단으로 올림 (transform.SetAsLastSibling())
Transition 설정(프로필/오버라이드)을 해석한 뒤, UIAnimationHelper를 통해
SlideIn / ZoomIn / FadeIn 중 하나를 코루틴으로 실행
CanvasGroup의 interactable, blocksRaycasts, alpha 를 적절히 세팅
onPreShow → 애니메이션 → onPostShow 순서로 이벤트 호출
Hide()

Transition 설정에 따라 SlideOut / ZoomOut / FadeOut 실행
CanvasGroup의 상호작용을 끄고(onPreHide) → 애니메이션 → onPostHide
마지막에 ApplyLifecycle()로 GameObject 비활성/파괴 여부 결정
ForceHide()

현재 진행 중인 애니메이션 코루틴을 즉시 중지
CanvasGroup을 바로 꺼주고(alpha=0 포함)
ApplyLifecycle()을 바로 적용해 애니 없이 즉시 정리
PopTo나 PopAll처럼 “중간 화면들을 애니 없이 정리해야 하는 경우”에
ForceHide()가 사용됩니다

초기 화면을 애니메이션 없이 띄우고 싶을 때
UIView의 entry 애니메이션을 UIAnimType.None으로 설정하거나,
NoEnter 같은 프로필(asset)을 만들어 entryAnim을 None으로 지정한 뒤,
초기 뷰에 해당 프로필을 연결하면 됩니다.
이렇게 하면 첫 진입 시에는 애니 없이 바로 그려지고,
이후 다른 화면에서 다시 Push될 때는 원하는 전환 애니메이션을 쓸 수 있습니다.

이 UI 프레임워크는 다음을 목표로 합니다.

스택 기반으로 화면 전환과 팝업을 단일 규칙으로 관리
UIView 단위로 전환 애니메이션 + 라이프사이클 책임 분리
ScriptableObject 프로필을 통한 전환 설정 재사용
ButtonAttribute/Debug 스크립트를 통한 에디터 친화적인 디버깅 지원

profile
아이디어 뱅크

0개의 댓글