그림1.png

📌 프로젝트 개요

항목 내용
📅 작업 기간 2025.01.03 ~ 2025.03.04 (2개월)
🎮 장르 배틀로얄, 서바이벌
🎯 모작 게임 PUBG
💻 개발 언어 C++
👥 팀 구성 총 5명
🧩 담당 파트 맵 / 게임 시스템 / 아이템 스폰 & 파밍 / 무기 시스템
🛠️ 개발 엔진 언리얼 엔진
GitHub https://github.com/PUBG-KI/PUBG-KI

📺 게임 영상

https://youtu.be/dZC1ZdkHE30?si=iT2fChIRQUtZB3DT

🔖 목차

🗓️ 프로젝트 수행 절차

프로토타입보고 (2주)

구현 목표
하이트맵을 통한 랜드스케이프 생성
머테리얼 인포 적용
레이어를 활용한 표면 구역 설정
PCG를 활용한 액터 배치
스플라인을 통한 도로 및 울타리 생성

CBT빌드보고 (3주)

구현 목표
배치된 건물에 랜덤한 아이템 스폰
바다 구현
이벤트 (보급품) 구현
자기장 구현

OBT빌드보고 (2주)

구현 목표
PCG의 스탬프 기능을 통한 최적화
날씨 효과 구현
사운드 추가

📝 기능 구현

실제 사녹 맵

image.png

제작 맵

image.png

Untitled

시스템

이 프로젝트의 게임 흐름은 **서버 권한을 가진 GameMode**를 중심으로 시작되며,

그 이후 전역 단위의 이벤트는 GameInstance에 등록된 전용 매니저 시스템을 통해 제어됩니다.

게임 인스턴스 (UBaseGameInstance) 활용

기능 요약

게임 진행 도중 지속적으로 제어해야 할 시스템들(자기장, 시간, 보급품, 비행기 등)은 게임 전역에서 접근 가능한 싱글톤 매니저 시스템을 구축하였습니다.

  1. 매니저 초기화 흐름

    **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();
    }**
    
    
  2. 각 매니저 역할 정리

    매니저 이름 주요 기능 연계 시스템 / 예시
    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 (멀티플레이 대응)