항목 | 내용 |
---|---|
📅 작업 기간 | 2025.01.03 ~ 2025.03.04 (2개월) |
🎮 장르 | 배틀로얄, 서바이벌 |
🎯 모작 게임 | PUBG |
💻 개발 언어 | C++ |
👥 팀 구성 | 총 5명 |
🧩 담당 파트 | 맵 / 게임 시스템 / 아이템 스폰 & 파밍 / 무기 시스템 |
🛠️ 개발 엔진 | 언리얼 엔진 |
GitHub | https://github.com/PUBG-KI/PUBG-KI |
https://youtu.be/dZC1ZdkHE30?si=iT2fChIRQUtZB3DT
구현 목표 |
---|
하이트맵을 통한 랜드스케이프 생성 |
머테리얼 인포 적용 |
레이어를 활용한 표면 구역 설정 |
PCG를 활용한 액터 배치 |
스플라인을 통한 도로 및 울타리 생성 |
구현 목표 |
---|
배치된 건물에 랜덤한 아이템 스폰 |
바다 구현 |
이벤트 (보급품) 구현 |
자기장 구현 |
구현 목표 |
---|
PCG의 스탬프 기능을 통한 최적화 |
날씨 효과 구현 |
사운드 추가 |
이 프로젝트의 게임 흐름은 **서버 권한을 가진 GameMode
**를 중심으로 시작되며,
그 이후 전역 단위의 이벤트는 GameInstance
에 등록된 전용 매니저 시스템을 통해 제어됩니다.
UBaseGameInstance
) 활용게임 진행 도중 지속적으로 제어해야 할 시스템들(자기장, 시간, 보급품, 비행기 등)은 게임 전역에서 접근 가능한 싱글톤 매니저 시스템을 구축하였습니다.
매니저 초기화 흐름
**void UBaseGameInstance::Init()
{
TimeManager = NewObject<UTimeManager>(...);
TimeManager->InitializeManager();
LandscapeManager = NewObject<ULandscapeManager>(...);
LandscapeManager->InitializeManager();
GameEventManager = NewObject<UGameEventManager>(...);
GameEventManager->InitializeManager();
ZoneManager = NewObject<UZoneManager>(...);
ZoneManager->InitializeManager();
AirplaneManager = NewObject<UAirplaneManager>(...);
AirplaneManager->InitializeManager();
DataTableManager = NewObject<UDataTableManager>(...);
DataTableManager->InitializeManager();
}**
각 매니저 역할 정리
매니저 이름 | 주요 기능 | 연계 시스템 / 예시 |
---|---|---|
TimeManager | 게임 흐름 제어 (시작 타이머, 비행기 알림 등) | NotifyClientsToArrivePlane → GameEventManager 호출 |
GameEventManager | 보급품, 레드존 등 시간 기반 이벤트 발생 | StartSupplyDropTimer → SpawnSupplyDrop |
LandscapeManager | 랜드스케이프 바운딩 박스 계산 및 랜덤 위치 제공 | GetRandomLocationOnLandscape → 보급/레드존 위치 결정 |
ZoneManager | 자기장 Zone 스폰 및 Shrink 시간 관리 | SpawnZone, ShrinkTime 변수 사용 |
AirplaneManager | 비행기 스폰 및 Timeline 이동 제어 | StartToMoveAirplane, NotifyStartToMoveAirplane |
DataTableManager | 아이템/무기 등 DataTable 참조 및 관리 | ItemSpawnerComponent에서 활용 가능 |
SoundManager | 사운드 재생 (2D, 3D) 서버에서 중계 | PlaySound2D, PlaySoundAtLocation (멀티플레이 대응) |