내일배움캠프_Unreal/TIL

내일배움캠프_Unreal/TIL - Day 65 CH3 팀플 KDT 회고

하임 2026. 3. 5. 21:40

1. 프로젝트 개요

  • 프로젝트명: T-DAS (Top-Down Action Shooter)
  • 개발 환경: Unreal Engine 5.5.4, C++, Visual Studio 2022
  • 핵심 목표: * 엔진의 서브시스템을 활용한 이벤트 드리븐 UI 구조 설계
    • C++ 중심의 컴포넌트 기반 전투 시스템 구축
    • 데이터 테이블을 활용한 하드코딩 없는 밸런싱 환경 구현

 

2. 핵심 설계 및 구현 (Keep)

2-1. 서브시스템 기반의 느슨한 결합(Loose Coupling) 설계

기존의 복잡한 클래스 간 참조를 피하기 위해 UDevHUISubSystem을 설계의 중심 축으로 활용했다.

  • 구현: 캐릭터의 스탯 변화(HP, Stamina)나 게임 상태(Stage Clear) 발생 시, UI가 캐릭터를 직접 참조하는 것이 아니라 서브시스템의 **델리게이트(Delegate)**를 구독하도록 구현했다.
  • 성과: UI와 로직 간의 의존성을 완전히 제거하여, 캐릭터 로직이 변경되어도 UI 시스템이 깨지지 않는 높은 유지보수성을 확보했다.

2-2. 데이터 중심 설계(Data-Driven Design)의 고도화

모든 게임 수치를 코드와 분리하여 UDataTable로 관리했다.

  • 수식 기반 스케일링: 단순 고정값이 아닌, 스테이지와 웨이브 변수에 따른 동적 난이도 공식을 적용했다.
    • FinalHealth = BaseHealth \times (1 + StageHealthInc \times Stage + WaveHealthInc \times Wave)
  • 성과: 재컴파일 없이 에디터상에서 적의 능력치, 무기 데미지, 웨이브 구성을 즉시 수정할 수 있는 기획 친화적 개발 환경을 구축했다.

2-3. 인터페이스를 활용한 전투 시스템 공용화

플레이어와 AI가 동일한 전투 규칙을 따르도록 IEntityStats, ICombatEntity 인터페이스를 설계했다.

  • 구현: TakeDamage와 같은 핵심 로직을 인터페이스화하여, 투사체나 근접 공격 판정 시 대상의 구체적인 클래스를 알 필요 없이 데미지를 전달하도록 처리했다.

3. 기술적 도전과 문제 해결 (Problem)

3-1. 심리스한 레벨 전환과 데이터 영속성 관리

OpenLevel을 통한 스테이지 전환 시, 플레이어의 점수와 해금된 무기 데이터가 초기화되는 문제가 발생했다.

  • 해결: 레벨 전환 시에도 소멸되지 않는 UKirboGameInstance를 데이터 저장소로 활용했다. 스테이지 종료 시 현재 상태를 GameInstance에 캐싱하고, 새로운 레벨의 BeginPlay 타이밍에 GameState가 이를 복구하도록 설계하여 데이터의 연속성을 보장했다.

3-2. 동적 환경에서의 안정적인 적 스폰 로직

NavMesh 위 랜덤 스폰 시 적이 지형 지물에 끼이거나 부적절한 위치에 생성되는 이슈가 있었다.

  • 해결: AStageSpawner 클래스에서 ProjectPointToNavigation 함수를 사용하여 유효한 내비게이션 좌표인지 1차 검증하고, 플레이어의 카메라 프러스텀(Frustum) 외곽에서만 생성되도록 재시도 로직을 구현하여 게임의 안정성과 몰입감을 동시에 확보했다.

3-3. UI 연출과 로직의 동기화

사망 몽타주 재생 중 UI가 즉시 출력되어 연출 흐름이 끊기는 현상을 확인했다.

  • 해결: 애니메이션 노티파이(AnimNotify)를 활용해 특정 프레임에서 이벤트를 발생시키거나, 몽타주 종료 델리게이트를 통해 UI 출력 시점을 제어하여 자연스러운 게임 피드백을 구현했다.

 

4. 향후 개선 방향 (Try)

4-1. 메모리 최적화를 위한 비동기 로딩 도입

현재 데이터 테이블의 하드 레퍼런스(Hard Reference) 구조를 TSoftObjectPtr를 활용한 비동기 로딩 방식으로 전환하여, 스테이지 시작 시 발생하는 히치(Hitch) 현상을 개선할 계획이다.

4-2. AI 행동 트리(Behavior Tree)의 고도화

현재 C++ 상태 머신 기반의 AI 로직을 엔진의 행동 트리와 결합하여, 엄폐 및 협동 공격과 같은 고도의 전략적 행동을 수행하는 AI를 구축하고자 한다.

 

5. 결론: 프로젝트를 통해 증명한 역량

본 프로젝트를 통해 언리얼 엔진의 프레임워크(GameMode, GameState, Subsystem)에 대한 깊은 이해도를 증명했다. 특히 단순히 기능을 구현하는 것에 그치지 않고, "어떻게 하면 코드의 의존성을 줄이고 확장 가능한 구조를 만들 것인가"에 대한 실무적인 해답을 찾는 과정을 경험했다. 이는 향후 대규 모 프로젝트에서도 견고한 시스템을 설계할 수 있는 밑바탕이 될 것이라고 생각한다!