Data-Driven Architecture
Excel 기반 게임 데이터를 ScriptableObject로 변환하고, Addressables와 DI Container를 통해 런타임에서 사용할 수 있는 구조를 구축했습니다.
UNITY / 2D PIXEL-ART METROIDVANIA
Unity 기반 2D 픽셀아트 메트로배니아 프로젝트입니다. 메인 클라이언트 프로그래머로 참여하여 데이터 파이프라인, DI 초기화 구조, 씬 전환, 플레이어 시스템, 세이브/진행도, 컷씬 연동, 보스 기믹을 구현했습니다.
Main Client Programmer / Development Lead
Excel 기반 게임 데이터를 ScriptableObject로 변환하고, Addressables와 DI Container를 통해 런타임에서 사용할 수 있는 구조를 구축했습니다.
게임 시작 전 전역 데이터 초기화, 슬롯 데이터 로드, Manager 등록, 인게임 진입으로 이어지는 초기화 흐름을 구성했습니다.
메트로배니아 구조에 맞춰 Stage > Sector 기반 맵 구조와 Portal 이동, Spawn 위치 복원 흐름을 구현했습니다.
이동, 점프, 대쉬, 공격, 투사체, 회복 기능을 구현하고 PlayerState를 통해 상태를 관리했습니다.
Naninovel 커스텀 커맨드를 개발하여 시나리오 스크립트에서 오브젝트 이동, BGM, 조명, Glow, 보스전 진입을 제어했습니다.
Mob, Bullet, SFX 풀링 구조를 도입하고 Stage 단위 선할당 구조로 반복적인 Instantiate / Destroy 비용을 줄이는 방향으로 개선했습니다.
Google Sheet / Excel
↓
Converter.cs
↓
ScriptableObject Data
↓
Addressables
↓
GlobalInstaller
↓
DIContainer.Global
↓
Runtime Managers초기에는 로컬 Excel 파일을 기준으로 데이터를 관리했고, Converter.cs를 통해 각 시트를 ScriptableObject로 변환했습니다. 이후 협업 중 데이터 충돌 문제가 생기면서 Google Sheet 기반 동기화 구조를 추가하여 팀원이 같은 데이터 소스를 기준으로 작업할 수 있도록 개선했습니다.
프로젝트를 진행하며 발생한 구조적 문제와 이를 해결하기 위해 적용한 개선 사례입니다.
Problem
초기에는 로컬 data.xlsx를 기준으로 게임 데이터를 관리했지만, 개발 인원이 늘어나면서 각자 수정한 데이터 파일이 충돌하는 문제가 발생했습니다.
Solution
Converter.cs를 통해 Excel 데이터를 ScriptableObject로 변환하는 기존 구조를 유지하면서, 후반부에 GoogleSheetSync.cs를 추가하여 공유 문서 기반으로 데이터를 동기화할 수 있도록 개선했습니다.
Result
기획 데이터와 런타임 코드를 분리한 상태를 유지하면서, 팀원이 동일한 데이터 소스를 기준으로 작업할 수 있는 구조로 확장했습니다.
Problem
초기에는 Sector 진입 시 Mob Prefab을 Instantiate하는 방식이어서 씬 전환이나 전투 진입 시 객체 생성 비용이 발생할 수 있는 구조였습니다.
Solution
Stage 단위로 필요한 Mob 종류와 최대 수를 계산해 미리 풀링하고, Sector 전환 시에는 풀에서 활성화/비활성화하여 재사용하도록 구조를 변경했습니다.
Result
런타임 중 반복적인 Instantiate / Destroy 호출과 GC Alloc 발생 가능성을 줄이는 방향으로 최적화했습니다.
Problem
보스 등장, BGM 전환, 오브젝트 이동, 조명 효과, 전투 진입 같은 연출이 코드와 씬 오브젝트에 흩어지면 유지보수가 어려웠습니다.
Solution
Naninovel 커스텀 커맨드를 만들어 시나리오 스크립트에서 Unity 오브젝트와 게임 상태를 제어할 수 있도록 구성했습니다.
Result
컷씬 작성과 게임플레이 이벤트 연결을 스크립트 중심으로 처리할 수 있게 되어, 연출 수정과 테스트가 쉬워졌습니다.
개발 과정에서 구현한 주요 기능들을 짧은 영상으로 정리했습니다. 각 영상은 실제 구현 기능과 관련 시스템을 보여주기 위한 기록입니다.
PlayerState를 중심으로 이동, 점프, 공격 상태를 관리하고, 컷씬/사망/보스전 진입 상황에서 입력이 충돌하지 않도록 상태 전환 조건을 정리했습니다.
회복약 사용 조건, 회복 이펙트, SFX 재생, 최대 체력 상태에서의 사용 방지 로직을 구현했습니다. 사망/부활 흐름과도 연결되도록 InGameManager와 PlayData를 함께 수정했습니다.
PortalUnit을 통해 목적지 씬과 스폰 위치를 결정하고, SectorManager와 연동하여 메트로배니아식 룸 이동 흐름을 구성했습니다.
Easy Save 3 기반 PlayData/UserData 구조와 SaveCache를 사용해, 사망 후 복귀 시 플레이어 진행도와 위치 정보가 유지되도록 구성했습니다.
Naninovel 커스텀 커맨드를 개발해 시나리오 스크립트에서 오브젝트 이동, BGM 제어, 조명, 스프라이트 효과, 보스전 진입을 제어할 수 있도록 만들었습니다.
보스전의 등장, 페이즈 전환, 컷씬, 전투 진입 흐름을 상태 단위로 나누어 관리하고, 재도전 시 트리거 조건이 꼬이지 않도록 수정했습니다.
프로젝트 초기 프로토타입부터 현재 빌드까지, 주요 기능이 어떤 순서로 발전했는지 정리했습니다.
Early Prototype
프로젝트 초기에 기본 조작과 전투 흐름을 검증하던 단계입니다.
Core Architecture
데이터 기반 구조와 씬 전환 흐름이 잡히기 시작한 단계입니다.
First Boss
보스전, 전투 트리거, 컷씬 연결을 실험하던 단계입니다.
Cutscene Integration
Naninovel과 Unity 런타임 오브젝트를 연결해 연출을 구성한 단계입니다.