자작 게임 프레임워크


개요

이 프로젝트는 C++언어SDL2 멀티미디어 라이브러리를 기반으로 만든 2D 게임 프레임워크입니다. 본 프레임워크를 직접 활용하여 만든 게임은 이탈리안 브레인롯 서바이버즈를 확인하면 됩니다.

⚠️ 참고: 인터넷에 공개된 오픈소스를 모방하는 것이 아니라, 게임 프레임워크에 필요한 구조를 처음부터 직접 고민하고 설계하여 구현했습니다.

저장소 보기


게임 프레임워크 실행 흐름 설계도 | 자세히 보기

위 이미지는 핵심 실행 흐름을 중심으로 간략하게 만든 설계도입니다.


📂 프로젝트 전개 및 고찰

1. 주요 구현 기능 목록

  1. 에셋 매니저 메모리 최적화 설계
    • 메모리 단편화 방지와 캐시 효율 구조
  2. 씬 매니저와 리소스 최적화 설계
    • 스택 기반 씬 전환 구조
    • 스마트 포인터 기반 리소스 관리
  3. 씬-레이어-오브젝트-컴포넌트 계층 구조
  4. 입력 처리 시스템 구조
    • 입력 매니저와 입력 컴포넌트 분리
    • 유연한 입력 처리 및 확장성
    • 연관된 컴포넌트: CInputComponent
  5. 오브젝트 시각 구성 및 애니메이션 구조
    • 공유 텍스처로 리소스 중복 최소화
    • 클론 애니메이션으로 오브젝트별 독립적 제어
    • 연관된 컴포넌트: CSpriteComponent, CVFXComponent
  6. 충돌 및 물리 시스템 구조
    • 공간 분할과 충돌 채널 기반 효율적 충돌 검사
    • 충돌 쌍 단위 관리와 물리적 상호작용 처리
    • 연관된 컴포넌트: CBoxCollider, CCircleCollider, CRigidbody
  7. 위젯 시스템 구조
    • 기본 제공 위젯 구성
    • 계층 구조 기반 UI 관리
    • 입력 처리와 기본 상호작용 통합
    • 연관된 컴포넌트: CWidgetComponent

2. 목표 및 방향성

이 프로젝트를 착수하기 전, 전체 개발 과정의 기준이 될 목표와 방향성을 명확히 설정했으며, 이를 바탕으로 단순한 기능 구현을 넘어 구조적 완성도를 갖춘 프레임워크 구현을 지향했습니다.

  • 목표:
    1. C++ 언어 및 저수준 기술 역량의 향상
      • 메모리 및 객체 생명주기 관리
      • 캐시 최적화 관점에서의 설계
      • 디버깅 및 성능 분석 능력
    2. 상용 게임 엔진 시스템 구성의 이해
      • 엔진 실행 흐름의 전반적 구조
      • 엔진 핵심 서브시스템 구성 원리
      • 계층적 구조와 시스템 간 상호작용
  • 방향성:
    1. 일관성 있는 매끄러운 구조의 설계
    2. 상황에 최적화된 자료구조의 선택
    3. 유연한 확장성과 유지보수 용이성

3. 개발 과정의 고민과 성찰

개발 과정에서 설정한 목표와 방향성에 충실했습니다. 기술적 완성도를 높이기 위해 이미 구현이 끝난 기능도 더 나은 구조와 이론적으로 바람직한 자료구조나 흐름을 적용하기 위해 설계와 구현을 반복하며 수정 및 개선했습니다. 이러한 반복적인 변경과 재구현은 높은 기술적 완성도를 중시한 결과였으며, 그 흔적이 깃 커밋 기록에도 그대로 남아 있습니다.

그러나 이러한 접근은 예정된 기한을 넘기는 문제로 이어져, 전체 개발 기간이 대략 7개월에 이르렀고 기술적 집착과 현실적 판단, 그리고 한정된 개발 기간 속에서의 균형이 중요하다는 점을 깨닫게 되었습니다.


4. 결과 및 성과

본 프로젝트는 저수준 기술 역량 강화, 엔진 구조 이해, 일관성 있는 설계라는 초기 목표를 바탕으로 진행되었으며, 최종적으로 해당 목표를 실질적으로 구현해냈습니다.

주요 구현 기능들은 모두 직접 설계 및 최적화 과정을 거쳐 완성되었으며, 특히 메모리 풀 기반 객체 관리, 리소스 최적화 설계, 그리고 씬 전환 및 충돌 최적화 구조는 안정성과 성능 향상에 크게 기여했습니다.

이를 통해 단순히 동작하는 코드가 아니라, 상용 게임 엔진의 구조적 특성을 반영한 유연하고 확장 가능한 게임 프레임워크를 구축할 수 있었으며, 그 과정에서 C++ 저수준 최적화 경험, 엔진 아키텍처 전반에 대한 이해, 그리고 일관성 있는 구조 설계 역량을 한 단계 끌어올릴 수 있었습니다.