무기와 스킬을 활용해 몰려오는 적과 보스를 물리치는 2D 액션 게임입니다. 시스템 결합도를 낮추고 유지보수성을 높여주는 아키텍처 설계와 디자인 패턴 적용에 집중했습니다.
- 플랫폼: Window (PC)
- 개발 엔진: Unity 6 (60002.15f1)
- 플레이 방식:
- 다수의 적 웨이브를 물리치고 최종 보스를 처치하는 스테이지 클리어 방식
- 무기, 스킬, 패링을 활용한 전략적인 전투 시스템
- 서비스 로케이터 & 이벤트 버스
BattleManager,GameManager,ObjectPool등 전역적으로 사용되는 시스템을 싱글톤 대신ServiceLocator로 관리하여 의존성을 역전시켰습니다.- 사운드 출력 등 시스템 간의 통신은
Event Bus를 통한 발행-구독(Publish-Subscribe) 모델을 채택하여 시스템 간의 결합도를 크게 낮췄습니다.
- 보스 AI 구현 - 전략 패턴 & 팩토리 패턴
- 보스의 다양한 스킬을
IBossSkillStrategy인터페이스를 통해 모듈화했습니다. BossSkillStrategyFactory를 통해 스킬 타입에 맞는 전략 객체를 반환받아 사용합니다.- 기대 효과: 새로운 보스 스킬이 추가되더라도 기존
BossController의 수정 없이 새로운 스킬 클래스만 추가하여 확장이 가능합니다.
- 보스의 다양한 스킬을
- 모든 게임 데이터(적, 보스, 무기, 웨이브, 스테이지 등)를 ScriptableObject로 분리했습니다.
- 기대 효과: 코드 수정 없이, 에디터 상에서 직접 수치를 조정하고 밸런싱 테스트를 진행할 수 있는 유연한 환경을 구축했습니다.
- 오브젝트 풀링
- 적 생성, 데미지 텍스트, 이펙트 등 빈번하게 생성/파괴되는 객체에 오브젝트 풀링을 적용하여 Instantiate/Destroy로 인한 오버헤드와 런타임 메모리 파편화를 방지했습니다.
- 캐싱
- 코루틴에서 자주 사용되는
WaitForSeconds를 Dictionary에 캐싱하여 불필요한 GC 할당을 방지했습니다.
- 코루틴에서 자주 사용되는
- 상태 기반 캐릭터 컨트롤
PlayerController를 허브로 하여 무기 시스템과 스킬 시스템을 컴포넌트 단위로 분리하여 유지보수를 용이하게 했습니다.
- 전투 구현
- 타격감을 극대화하기 위해 화면 흔들림, 역경직, 넉백, 피격 시 텍스트 팝업을 구현했습니다.
- 군집 알고리즘을 활용해 적들이 플레이어를 추적할 때 서로 겹치지 않고 자연스럽게 이동하도록 구현했습니다.
Scripts/
├── Core/ # ServiceLocator, EventBus, ObjectPool 등 공용/기반 시스템
├── Player/ # 플레이어 컨트롤 및 상태 (Weapon, Skill, Stats)
├── Enemy/ # 잡몹 및 보스 AI (BossController, Strategy 등)
├── GameData/ # 적, 스킬, 사운드, 스테이지 등 데이터를 ScriptableObject로 관리
└── UI/ # 메인메뉴, 인벤토리, 전투HUD 등 UI 관리
- 이동:
A/D - 기본 공격:
마우스 좌클릭 - 방어 / 패링:
마우스 우클릭(보스 공격을 적절한 타이밍에 방어 시 패링 발동) - 스킬 사용:
1,2,3 - 설정 메뉴:
ESC