AI/Unity

DevLog (Merged: 2026-02-07 ~ 2026-02-08)

blacknabis 2026. 2. 8. 03:46

DevLog (Merged: 2026-02-07 ~ 2026-02-08)

[2026-02-07] App Entry Point & UI Improvements

작업 내용 요약

1. App Entry Point 및 씬 관리 구조 개선

  • AppManagerAppdelegate 리팩토링:
    • 공통 로직을 Common/App/AppManagerBaseCommon/App/Appdelegate로 이동하여 재사용성을 높임.
    • ISceneController 인터페이스 도입으로 씬 관리 추상화.
    • 프로젝트별 AppManager (CatSudoku.AppManager)가 AppManagerBase를 상속받아 구현.
  • 초기화 로직 개선:
    • AppInitializer (RuntimeInitializeOnLoadMethod(AfterSceneLoad))를 통해 앱 시작 시점 명확화.
    • 첫 번째 씬 로드 시 sceneLoaded 콜백이 누락되는 문제를 해결하기 위해 ProcessInitialScene 수동 호출 로직 추가.

2. UI/UX 개선 및 반응형 레이아웃 구현

  • Canvas Scaler 설정 변경:
    • Portrait 모드 및 정사각형 화면 대응을 위해 matchWidthOrHeight0f (Width 기준)으로 변경.
  • GameScene 반응형 레이아웃 (Refactoring):
    • 초기에는 스크립트 기반 ResponsiveBoardLayout을 시도했으나, Unity UI 시스템을 활용한 VerticalLayoutGroup 기반으로 전면 리팩토링.
    • 구조 변경:
        LayoutContainer (VerticalLayoutGroup)
          ├── HeaderPanel (Fixed Height)
          ├── BoardContainer (Flexible Height)
          │    └── GameBoard (AspectRatioFitter 1:1)
          ├── ToolsBar (Fixed Height)
          └── NumberPad (Fixed Height)
    • BoardLayoutAdjuster 추가: 보드 크기가 변경될 때 셀 크기(cellSize)를 자동으로 계산하여 그리드 정렬 유지.
    • SudokuPrefabMaker 업데이트: 에디터 스크립트를 수정하여 위 구조대로 프리팹이 생성되도록 변경 (현재는 레이아웃의 기본 틀만 생성하고 디테일은 프리팹에서 직접 수정하는 방향으로 전환).

3. 기타 수정 사항

  • SudokuGameUI에서 불필요한 ResponsiveBoardLayout 참조 제거.
  • ISceneControllerSceneBase 정리.

다음 계획 (ToDo)

  • GameScene UI 프리팹 (SudokuGameUI) 레이아웃 미세 조정 (사용자 직접 진행).
  • 반응형 레이아웃 테스트 및 검증.
  • 추가적인 UI 폴리싱 및 게임 로직 개선.

[2026-02-08] Pop-up System Overhaul & Input Handling

🔄 Major Changes

1. 팝업 시스템 대대적 개선 (Popup System Overhaul)

기존의 단순하고 독립적인 팝업 구조를 확장성 있고 UX 친화적인 시스템으로 개편했습니다.

  • BasePopup 기능 확장:
    • ClosePopup(): 팝업을 닫는 표준 메서드. 단순히 닫는(Hide) 것뿐만 아니라 Destroy를 수행하여 리소스를 정리합니다.
    • SetCloseAction(Action action): 팝업이 닫힐 때 자동으로 실행될 콜백을 등록합니다. 어떠한 방식으로 닫히든(버튼, ESC 등) 액션 수행을 보장합니다.
    • Dimmed Background: useDimmedBackground 옵션을 통해 팝업 뒤에 자동으로 반투명 검정 배경을 생성하여 클릭을 차단하고 가독성을 높였습니다.
  • GameClear / GameOver Popup 단순화:
    • 복잡한 버튼(Next, Retry, MainMenu) 구조를 단일 확인(Confirm) 버튼으로 통합했습니다.
    • 확인 버튼 클릭, 닫기 버튼(X), ESC 키 입력 등 어떤 입력을 받더라도 ClosePopup()이 호출되며, 미리 등록된 다음 스테이지 이동 또는 재시작 액션이 자동으로 실행됩니다.
    • 불필요해진 Home 버튼은 비활성화했습니다.

2. 중앙 집중식 입력 처리 (Centralized Input Handling)

개별 스크립트에서 입력을 감지하던 방식의 문제점(중복, 우선순위 관리 어려움)을 해결하기 위해 Chain of Responsibility 패턴을 도입했습니다.

  • AppManager: 최상위에서 Update 루프를 돌며 ESC 키 입력을 감지합니다.
  • SceneController: AppManager로부터 입력을 받아 현재 활성화된 MainUI로 전달합니다.
  • MainUI (SudokuGameUI):
    1. 먼저 활성화된 팝업이 있는지 확인합니다.
    2. 있다면 Popup.OnBackKey()를 호출하여 팝업만 닫고, 이벤트를 소비(return true)합니다.
    3. 없다면 자신의 백키 로직(메인 메뉴 이동 등)을 수행합니다.

이로써 팝업이 떠 있을 때 뒤에 있는 게임 UI나 씬이 반응하는 문제를 원천적으로 차단했습니다.

💾 Fixing Game Save Issue (Previous Session)

게임 중 메인 메뉴로 이동하거나 스테이지를 클리어했을 때 저장이 올바르게 이루어지지 않던 문제를 수정했습니다.

  • GameManager: CompleteCurrentStage() 메서드를 추가하고 NextStage 로직을 변경하여, 스테이지 클리어 시 즉시 저장을 수행하도록 했습니다.
  • SudokuGameUI: ShowGameClear 팝업에서 홈 버튼 클릭 시에도 CompleteCurrentStage()를 호출한 후 이동하도록 수정하여, "다음 레벨" 버튼을 누르지 않고 나가더라도 클리어 상태가 저장되도록 보장했습니다.
  • SaveSystem: ClearSave() 메서드가 진행 중인 게임 데이터(SAVE_KEY)만 삭제하고, 사용자의 스테이지 진행 정보(PREF_STAGE)는 유지하도록 수정했습니다.

🐛 Bug Fixes & Refactoring

  • BasePopup / BaseUI 상속 구조 정리:
    • BaseUIvirtual OnDestroy 메서드가 없어 자식 클래스에서 오버라이드할 때 발생하던 컴파일 오류를 해결했습니다.
    • BasePopupMainMenuUI 등에서 override 키워드를 명시적으로 사용하여 경고를 제거하고 OOP 구조를 준수했습니다.

📋 Task Plan & Progress (Completed)

금일 진행된 팝업 개선 작업의 상세 내역입니다.

  • Enhance BasePopup
    • ESC 키 지원 (OnBackKey)
    • 자동 파괴 및 닫힘 액션 (ClosePopup, SetCloseAction)
    • 딤드 배경 옵션 (useDimmedBackground)
  • Implement Centralized Input Handling
    • AppManager -> Scene -> Popup 구조로 ESC 입력 전파
  • Refine Popup UX
    • GameClearPopup: Next 버튼을 Confirm으로 통합
    • GameOverPopup: Retry 버튼을 Confirm으로 통합
    • 불필요한 Home 버튼 제거
  • Documentation
    • README.md 업데이트
    • DevLog 작성

📝 Next Steps

  • 팝업 애니메이션 고도화 (현재는 기본적인 스케일 애니메이션만 적용됨)
  • 설정(Settings) 팝업 구현 및 연동
  • 사운드 매니저와 팝업 연동 (버튼 클릭음, 팝업 등장음 등)


NAS의 개인 깃서버가 아닌 깃허브에 등록.

반응형