유니티 방치형 프로젝트 - 영웅 팝업 Open/Close(Stack 이용하기)

반응형

구현할 내용

팝업 열기 및 닫기 구현하기

공부하면서 배운 것

Stack 자료구조를 사용한 이유.

팝업 Open/Close 할 때 자체적으로 그냥 열거나 Destory하면 되는데 굳이 Stack에 넣은 이유는 닫기 버튼 누를 때 뿐만 아니라 Esc 버튼을 누를 때 최근에 연 것 부터 해서 닫게 하기 위해서이다. 또는 구글 플레이스토어에서는 뒤로가기  기능을 토해 앱을 종료하는 팝업이 나오는 앱을 홍보해주는 그런 특성이? 있다고 한다. 

구조 간단 요약 

구현할 것 단계적으로 나누기 

1. 영웅 버튼에 Base_Canvas.GetUI 메서드 연결

영웅 버튼을 클릭하면 Base_Canvas의 GetUI메서드로 String을 전달.

영웅 버튼 UI

 

Base_Canvas.cs의 GetUI는 리소스 폴더에서 해당 팝업을 가져와 Instantiate 하고 Utils의 Stack에 해당 팝업을 Push 한다.

Base_Canvas.cs

Instantiate 하면 아래와 같이 캔버스 자식으로 들어가면서 열린다.

팝업 열림

2. 닫기

Instantiate한 Heros 오브젝트 자식에는 닫기 버튼이 포함되어 있는데 클릭 시 상위 부모의 오브젝트에 있는 DisableObj 메서드를 실행한다.

 

Heroes 클래스가 아니라 UI_Base에 DisableObj가 있따.

 

닫기 버튼을 누르면 자체적으로 Destory하는데 그 전에 Utils Stack에 쌓여있는 것을 제거한다.

 

2. Stack 자료 구조 정의 (Utils.cs)

✅요약

  • 어디서든 쉽게 접근이 가능하도록 Static 처리
  • Popup 오픈 시 Stack에 Push 하도록 함
  • 1번에서 열은 팝업은 이 Stack에 Push 되고  닫기 하면 PoP된다.

기타 내용

3. Esc 닫기

 

팝업을 통한 닫기가 아니라 ESC 키를 입력하거나 모바일 뒤로가기를 누르면

Base_Canvas에서 이를 감지하고 Utils로 접근해서 ClosePopupUI메서드를 실행하여 Pop할것같지만 Peek해서 가져오고 참조로 접근해서 직접 DisableObj를 통해 POP하고 Destory를 진행한다.

 

반응형