Repository files navigation 🧩 BlockPop (Match-3 퍼즐 게임)
개발 엔진 : Unity 6.2
사용 언어 : C#
장르 : 2D 매치-3 퍼즐
개발 인원 : 1인 개발
특징 : 2D 타임어택 방식의 매치3(Match-3) 퍼즐 게임입니다.
1. 이벤트 기반 아키텍처(Event-Driven Architecture)를 통한 결합도 최소화
문제 인식 : 게임 로직이 복잡해짐에 따라 Manager 객체 간에 서로를 직접 참조(싱글톤 등)하는 방식은 결합도를 높이고 확장을 어렵게 만듭니다.
해결 방안 : GameEvents 정적 클래스를 통해 C# Action 델리게이트 기반의 이벤트 파이프라인(Publish-Subscribe 패턴)을 구축했습니다.
성과 : 점수 획득, 시간 변경, 블록 스왑 등 주요 트리거를 이벤트로 브로드캐스팅하여, GameManager, GridManager, UIManager 등이 서로의 존재를 알 필요 없이 독립적으로 동작합니다. 모듈화 및 코드의 응집력이 크게 향상되었습니다.
매치 검출 로직 :
블록 상호 스왑 후 가로/세로 방향을 순회하여 동일 색상을 탐색하는 CheckMatchAt 메서드를 구현했습니다.
T자 및 L자 등 교차 폭발이 일어날 때, HashSet<(int y, int x)> 자료구조를 활용해 중복된 블록 판정을 효율적이고 안전하게 걸러냅니다 (GetMatchedBlocks).
코루틴을 활용한 비동기 연쇄 폭발 처리 :
매치 확인 ➔ 파괴 및 점수 합산 ➔ 상단 블록 낙하 ➔ 새 블록 보충의 복잡한 사이클을 코루틴(IEnumerator) 단계별 지연을 통해 직관적으로 제어합니다. 다중 콤보 처리가 안정적으로 이루어집니다.
문제 인식 : 운이 없을 경우, 플레이어가 더 이상 어떠한 블록을 옮겨도(1회 스와프 한정) 매치가 불가능한 '교착 상태'에 빠져 게임 진행이 막힐 수 있습니다.
해결 방안 : 플레이어에게 보이지 않게 백그라운드로 보드 내 모든 인접 블록의 가상 swap을 시뮬레이션하는 예외 처리 로직(HasAnyPossibleSwap)을 도입했습니다.
성과 : 매 폭발 사이클이 끝난 후 유효한 매치 케이스가 한 개도 없다고 판단되면, 코루틴 루틴 안에서 즉시 전체 블록을 재배열 하도록 구현하였습니다.
4. 상태 락 메커니즘을 통한 입력 버그 원천 차단
문제 인식 : 물리적인 블록 이동 및 DOTween 애니메이션이 재생 중일 때 사용자의 다형적인 클릭 입력이 들어오면, 그리드 배열의 논리적 2D 인덱스와 실제 View(오브젝트 위치) 간 동기화가 깨지는 버그가 발생합니다.
해결 방안 : 세마포 개념을 차용한 busyCount 락 변수를 구현하였습니다.
성과 : 작업 처리 전 Lock(), 완료 후 Unlock()을 호출하여 상태를 IsBusy로 만들고, 연산이 완전히 끝날 때까지 유저의 입력 자체를 차단하여 시스템 안정성을 다졌습니다.
GameEvents : 중앙 통제 통신망 역할을 하는 이벤트 허브
GridManager : 매치3 알고리즘의 핵심 (그리드 생성, 매치 판정, 중력 낙하 배열 연산 처리)
InputManager : Physics2D.Raycast 기반 정밀한 유저 마우스 조작 판별 및 이벤트 발송
Block : DOTween을 활용한 부드러운 위치 이동, 색상 및 UI 파티클 FX 상태를 가지는 객체
GameManager : 타임어택 플로우 통제
About
unity practice
Resources
Stars
Watchers
Forks
You can’t perform that action at this time.