Skip to content

jbaem/Lunar_Realm

 
 

Repository files navigation

Lunar Realm

"압도적인 물량의 쾌감과 전략적 디펜스의 조화"

Title Image

1. 프로젝트 소개

[ 기업 협약 프로젝트 ]

본 프로젝트는 디벨로켓에듀언리얼 엔진을 활용한 게임 개발자 부트캠프 과정 중, 블랙스톰과의 기업 협약을 통해 진행된 프로젝트입니다.


분류 내용
협업 기업 블랙스톰(BLACKSTORM)
개발 기간 2026.02 ~ 2026.04 (약 8주)
개발 인원 5인 (Team. 행운의 토끼발)
엔진 버전 Unreal Engine 5.6
주요 라이브러리 Gameplay Ability System(GAS)
Enhanced Input
Niagara Particle System
Unreal Motion Graphic(UMG)
대상 플랫폼 PC(Window) / Mobile(Android)

2. 게임 소개

Lunar Realm 은 서브컬처 감성의 RPG와 자동 디펜스(Auto-Defense) 장르를 결합한 게임입니다. 플레이어는 메인 캐릭터를 직접 조작하거나 자동 전투를 통해 몰려오는 대규모 적 웨이브를 막아내고, 아군 유닛을 소환하여 적의 기지를 파괴해야 합니다.

Gameplay


분류 내용
장르 수집형 RPG + 자동 디펜스
시점 가로 사이드뷰 (2.5D/3D 리소스 기반)
핵심 컨셉 다수의 적을 처치하는 Hack & Slash의 쾌감 + 아군 멤버/장비 조합을 통한 전략적 디펜스
레퍼런스 냥코 대전쟁, 팔라독

3. 시작하기

설치 및 실행 방법

A. Clone 및 빌드

git clone https://github.com/jbaem/Lunar_Realm.git
# .uproject 파일을 우클릭하여 Generate Visual Studio project files 실행
# .sln 파일을 열어 Development Editor 구성으로 빌드 (Win64)

4. 담당 기능

4.1. 게임 흐름 제어

기능 관련 클래스 설명
월드 이동/비동기 로드 ULRGameInstance
ALRTransitionGameMode
인게임 에셋 로딩 시 발생하는 프레임 드랍을 방지하기 위해 심리스 트랜지션 및 비동기 레벨 스트리밍 구조를 구축했습니다.
스테이지 관리 UStageManagerSubsystem 아웃게임과 인게임 간의 연결을 담당하는 전용 서브시스템입니다. 아웃게임에서는 각 스테이지의 기본 정보와 클리어 여부(진행도)를 관리하며, 인게임 진입 시 핵심 데이터를 전달하도록 구현했습니다.
인게임 흐름 ALRStageGameMode 인게임 진입 시 초기화, 웨이브 시작, 게임 종료, 일시 중지 등 인게임에서 발생하는 모든 실시간 흐름을 제어합니다.

4.2. UI 시스템 아키텍처

기능 관련 클래스 설명
UI 관리 UUIManagerSubsystem 게임 내 모든 UMG 위젯의 스택 및 레이어 순서(Z-Order)를 제어하는 전용 서브시스템을 구축했습니다.
위젯 생명주기 최적화 ULRBaseWidget 모든 UI의 기반이 되는 최상위 Base 클래스입니다. 위젯의 생성/활성화/비활성화/파괴 등의 생명주기(Lifecycle) 처리를 공통화 및 자동화 했습니다.
팀원들이 위젯을 추가할 때 가상 함수 내부의 핵심 비즈니스 로직만 오버라이드하여 구현할 수 있도록 설계하여 메모리 누수를 방지했습니다.
아웃게임 요소 UI 가챠(뽑기)를 제외한, 로비, 도감 등 아웃게임의 UI 콘텐츠 전반을 구현했습니다.

4.3. 추가 구현 및 개발 생산성 요소

기능 관련 클래스 설명
텍스쳐 수정 (에디터 확장) UTextureUtility 그래픽 리소스 가공을 위해 외부 편집 툴(포토샵 등)을 켜야하는 번거로움을 줄이고자 언리얼 에디터를 확장한 툴입니다.
에디터 내부에서 실시간으로 이미지 반전, 결합 등 간단한 텍스처 편집 작업의 처리를 지원합니다.
런타임 디버깅 ULRCheatManager 테스트 및 밸런싱 검증 효율화를 위해 CheatManager를 확장했습니다.
개발 단계에서 재화 강제 지급, 스테이지 해금, 무적 모드 등의 디버깅 커맨드를 런타임 환경에서 제어할 수 있도록 지원합니다.
오브젝트 풀링 UPoolingSubsystem 잦은 동적 할당으로 인한 프레임 스파이크를 방지했습니다.

5. 프로젝트 구조 및 컨벤션

5.1. 폴더 구조

상속 관계나 기능(Gameplay, System, UI)에 따라 분류하여 개발자가 헤더 파일 및 클래스를 직관적으로 찾을 수 있게 구성했습니다.

Lunar_Realm/
├── Config/             # 프로젝트 설정 파일 (.ini)
├── ExternalSource/     # 외부 정적 데이터
├── Source/LunarRealm/  # C++ 소스 코드 (Public / Private)
├── Content/            # 언리얼 에셋 (Blueprint, Material, DT 등)
├── Image/              # README 및 문서용 이미지 에셋
└── Document/           # 기타 공유 문서
폴더 구조 상세 보기
Source/LunarRealm/Public/
├── AI/                 # Behavior Tree 노드 (Service, Task, Decorator)
├── Actors/             # 월드 배치용 기타 기능 액터
├── Anim/               # 애니메이션 관리 (AnimInstance, AnimNotify)
├── Core/               # 게임 흐름 제어 (GameInstance, GameMode, GameState)
├── Data/               # 전역 상수, 열거형(Enum), 데이터 에셋 정의
├── GAS/                # Gameplay Ability System (Gameplay Ability, AttributeSet, Tags)
├── Input/              # Enhanced Input 기반 입력 매핑 
├── Interfaces/         # 공용 인터페이스
├── Projectiles/        # 투사체 종류별 로직
├── SaveGame/           # 로컬 데이터 직렬화 및 게임 세이브 구조
├── Structures/         # 스폰, 기지 등 핵심 코어 데이터 (기지, Spawner)
├── Subsystems/         # 엔진 생명주기 기반 모듈형 매니저 및 설정
├── Systems/            # 전역 시스템 유틸리티 (Logging, CheatManager, Texture Utility)
├── UI/                 # UMG 위젯 연동 클래스
└── Units/              # 캐릭터 및 컴포넌트 (Character, PlayerController, AIController)

5.2. 에셋 관리 방식

  • 모든 외부 리소스는 Content/Asset/ 하위에서 임포트한 에셋 유형별로 분류하여 관리했습니다.
  • 에셋 네이밍은 언리얼 표준 접두사 규칙(M_ Material, WBP_ Widget Blueprint 등)을 준수하여 리소스 탐색 효율을 보장했습니다.

5.3. 아키텍쳐 핵심 설계

분류 설명
Subsystem 중심 설계 전역 매니저 객체들은 GameInstanceSubsystemWorldSubsystem 기반의 모듈형 구조로 설계하여, 모듈 간 결합도를 낮추고 안전한 생명주기를 확보했습니다.
Gamplay Ability System 기반 전투 - 언리얼 인젠의 GAS 프레임워크를 도입하여 스킬(Ability), 효과(Effect)의 확장성을 확보했습니다.
- Tag 기반 로직 제어: GameplayTag를 활용해 상태 이상, 스킬 트리거, 쿨타임을 데이터 주도형태로 관리했습니다.
Data-Driven (데이터 주도형 설계) 캐릭터 스탯, 장비 정보, 가챠 확률 등 모든 밸런싱 데이터를 Excel 파일과 DataTable을 통해 관리 했습니다.
Object Pooling 최적화 대규모 물량전 환경에서 유닛 소환, 투사체 생성 시 발생하는 프레임 드랍을 방지하기 위해 전용 PoolingSubsystem을 구현했습니다

5.4. 코드 스타일

팀 내 코드 가독성과 협업 효율을 위해 공식 언리얼 엔진 C++ 코딩 표준을 준수합니다.

5.5. 주요 브랜치

  • main: 최종 패키징을 위한 안정화 브랜치
  • develop: 각 기능들의 통합 및 QA를 진행하는 개발 브랜치
  • feature/: 기능 단위 독립 개발 브랜치 (ex. feature/character, feature/ui)

5.6. 커밋 메시지 규칙

모든 커밋은 프로젝트 변경 내용을 직관적으로 파악할 수 있도록 아래 접두사(Prefix) 규칙을 따릅니다.

타입 설명
feat 새로운 기능 추가
fix 버그 수정
docs 문서 수정
refactor 코드 리팩토링
test 테스트 코드
rename 파일 및 폴더 이름 수정 및 경로 이동
remove 파일 삭제

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • C++ 95.1%
  • C 4.7%
  • C# 0.2%