게임개발일지/멀티플레이 FPS

[언리얼5] 멀티플레이 FPS #0 - Lyra 프레임워크 기반 1인칭 슈팅 게임 만들기

김진우 개발일지 2026. 8. 16. 11:44

github : https://github.com/kjinwoo12/UE5NetworkFps

 

GitHub - kjinwoo12/UE5NetworkFps

Contribute to kjinwoo12/UE5NetworkFps development by creating an account on GitHub.

github.com

[언리얼5] 멀티플레이 FPS #0 Lyra 프레임워크 기반 1인칭 슈팅 게임 만들기

UE4로 멀티플레이 FPS를 만든 적이 있다. 그때와 비교하면 엔진도, 개발 실력도, 에픽이 내놓는 샘플의 기준점도 많이 달라졌다. 이번에는 에픽이 UE5 우수 사례로 제공하는 Lyra Starter Game 위에, 오버워치처럼 역할이 나뉘는 하이퍼 FPS를 만들어 보려고 한다.

이 글은 시리즈의 입문이다. Lyra가 무엇인지, 코드가 어떤 층으로 나뉘는지, 어떤 게임을 목표로 두는지만 정리한다.

Lyra란 무엇인가

Lyra Starter Game은 에픽 게임즈가 UE5와 함께 키워 온 학습용·출발점용 샘플 프로젝트다. Fab에서 엔진 버전에 맞는 프로젝트를 받아 시작하면 된다. 이 시리즈에서 사용하는 엔진 버전은 5.7이다.

[Lyra Starter Game

Lyra Starter Game is a new sample gameplay project released with UE5. While the feature set being released is just a core base, this game is still intended to be an excellent starting point for game developers to create new projects, as well as a hands-on

www.fab.com](https://www.fab.com/listings/93faede1-4434-47c0-85f1-bf27c0820ad0)

UE4의 ShooterGame을 그대로 이식한 프로젝트는 아니다. Gameplay Ability System, Enhanced Input, Common UI, Replication Graph, Game Features, Experience처럼 출시 게임을 전제로 한 뼈대가 처음부터 붙어 있다. 기본 모드는 팀 데스매치(Expanse)와 거점 쟁탈(Convolution, control point)이고, 캐릭터는 UE5 마네킹(Manny / Quinn)을 쓴다. 스켈레톤은 MetaHuman과 같은 계열이다.

Lyra 프레임워크 구조

게임이 Content/ 폴더 하나에 다 들어 있지 않다. 코어 시스템은 Source/LyraGame/에 있고, 플레이 가능한 한 판은 Game Feature 플러그인과 Experience 데이터로 조립된다.

대략적인 층은 아래와 같다.

층 하는 일
LyraGame 캐릭터, GAS, 카메라 모드 스택, 인벤토리·장비, 팀, 입력, Experience 로더
Experience (ULyraExperienceDefinition) 이번 판에서 켤 Game Feature, 기본 PawnData, 액션 목록
Game Features 모드·맵·무기처럼 켜고 끌 수 있는 단위. Plugins/GameFeatures/에 있다
Playlist / User Facing Experience 프론트엔드에서 어떤 Experience와 맵으로 들어갈지 정한다

Experience가 로드되면 GameFeaturesToEnable에 적힌 플러그인이 올라오고, DefaultPawnData로 폰·입력·기본 카메라 모드가 붙는다. 그래서 맵만 연 뒤 캐릭터 블루프린트만 고쳐 보면, Experience가 여전히 Shooter 히어로를 스폰하는 경우 1인칭 작업이 화면에 나타나지 않는다. 검증은 Fps Experience / Playlist로 들어가야 한다.

캐릭터 외형은 ULyraPawnComponent_CharacterParts가 Character Part를 ChildActorComponent로 붙이는 코스메틱 시스템이다. 몸통·머리·장비를 파트 단위로 갈아끼운다. 기본 3인칭 샘플은 이 파트에 보이는 메시가 하나다. 1인칭을 넣으면 같은 파트 액터 안에 조작하는 플레이어만 보는 메시가 하나 더 생긴다. 그 내용은 다음 글에서 다룬다.

카메라도 같은 식으로 확장한다. Lyra는 1인칭 전용 PlayerCameraManager를 새로 만들지 않는다. ULyraCameraComponent 안의 CameraMode 스택이 뷰를 계산하고, ULyraHeroComponent::DetermineCameraMode()가 폰 데이터의 기본 모드(또는 능력이 덮어쓴 모드)를 고른다. TopDownArena가 이 패턴으로 탑다운 모드를 붙인다. FPS도 같은 확장 지점에 1인칭 모드를 끼운다.

현재 저장소에서 FPS 전용으로 나눈 조각은 대략 이렇다.

  • Plugins/GameFeatures/FpsCore — 1인칭 카메라 모드, 히어로·애니메이션 연결
  • Plugins/GameFeatures/FpsMaps — 사격장 같은 맵과 Playlist
  • Plugins/GameFeatures/ShooterCore 등 — 기존 슈터 무기·능력 파이프라인

Shooter를 지우고 처음부터 짜는 작업이 아니다. 기존 Shooter 파이프라인 위에 1인칭 경험을 얹는다.

flowchart TB
  Frontend["프론트엔드 / Playlist"]
  Exp["Experience"]
  GF["Game Features"]
  Pawn["PawnData → 히어로"]
  Cam["CameraMode 스택"]

  Frontend --> Exp
  Exp --> GF
  Exp --> Pawn
  Pawn --> Cam

어떤 게임을 만들까

예전에 UE4로 멀티플레이 FPS를 만들고 블로그에 글을 남겼다. 그 사이 엔진 메이저 버전이 바뀌었고, 샘플의 기준점도 ShooterGame에서 Lyra로 옮겨 갔다. 같은 장르를 조금 더 좋은 구조로, 조금 더 높은 완성도로 다시 만들고 싶다.

목표는 세 가지다.

1. 오버워치 같은 하이퍼 FPS — 히트스캔만으로 끝나지 않고, 역할·쿨타임·궁극기가 한 판을 가른다.

2. 쟁탈전 — 거점을 두고 싸운다. Lyra의 Convolution이 이미 거점 모드의 뼈대를 보여 준다.

3. 캐릭터 셋 — 탱커 / 딜러 / 힐러. 코스메틱과 능력 셋이 히어로를 구분한다.

지금은 사격장 Experience에서 1인칭이 제대로 도는지, 착지와 앉기가 카메라를 뚫지 않는지를 먼저 붙잡는 단계다. 히어로 세 명과 쟁탈 규칙은 그다음이다.