본문 바로가기

Study/Unreal Engine

[UE5 C++ Multiplayer Shooter] #01 언리얼 엔진의 프레임 워크와 기초 그리고 네트워크

일반적인 게임 엔진은 다음 코드의 흐름대로 진행된다.

언리얼에서는 이러한 루프를 직접 다루지 않고, 기본함수가 아닌 인터페이스나 함수를 상속받아 확장하는 방법으로 구현한다. 이때, 언리얼 엔진의 프레임 워크에서 진행되는 흐름에 따라, 원하는 타이밍에 이를 넣어 쓰게 된다.

즉, 이 루프 과정에서 개발자는 엔진이 초기화되는 과정에서 진행되었으면 하는 일련의 로직들을 프레임워크의 흐름에 맞게 작성한다.

 

싱글플레이 기반의 게임이 아닌, 멀티플레이 기반의 네트워크 게임을 제작하는 방법을 먼저 배우게 된다면, 언리얼을 통한 게임 개발의 확장성을 획득할 수 있고(점점 배워가면서 알게 되겠지만, 멀티플레이 지원이 상당히 머리아프다. 싱글게임을 멀티플레이로 바꾸는 작업보다, 멀티플레이를 싱글로 사용하는 방법이 훨씬 훨씬 쉽고 용이하다.) 비동기 처리 공부를 통한 깊이 있는 학습이 가능하다.

 

언리얼 엔진은 기본적으로 모듈단위로 작동한다. 모듈은 UE의 SW 아키텍처의 가장 기본적인 구성요소로 특정 에디터 툴, 런타임 기능, 라이브러리 등의 기능을 독립된 코드 단위로 캡슐화한다.

언리얼 엔진에서 모듈을 생성하면 다음과 같은 구조의 Hierarchy가 생성된다.

 

플러그인은 코드 및 데이터 모음이다. 이는 일종의 모듈로 기존 UE의 기능(엔진, 툴, 게임 등)을 확장한다. 플러그인은 게임 프로젝트의 컴파일 타임에 언리얼 빌드 툴에서 자동으로 컴파일된다. 이렇게 컴파일 되므로, 플러그인을 통해 독립된 기능으로 분리된 코드를 어디에서나 자유롭게 사용이 가능하다.

 

언리얼 엔진은 기본적으로 다음과 같은 멀티플레이 환경을 지원한다.

  Playable Authority Open to client
Stand Alone O O -
Dedicated Server - O O
Listen Server O O O
Client O - -

 

Local Multiplay를 포함한 싱글 플레이는 하나의 세션과 하나의 인스턴스로 작동한다. 그렇기 때문에 개발하는 입장에서는 크게 신경 쓸 문제가 없지만, 멀티플레이의 경우에는 여러가지 애로사항이 존재한다.

멀티플레이의 핵심 과제는 '서로의 정보를 어떻게 교환하는가?'이다. 정보를 교환하는 방식은 여러가지가 있지만, 언리얼 엔진에서 제공하는 방식은 다음과 같다.

언리얼 엔진에서는 다음 그림과 같이 에디터에서 멀티플레이 테스트를 지원하고, netmode 설정을 통해

Standalone: 싱글플레이

Listen Server: 에디터를 서버로 생성

Client: 에디터를 Client로 두고, 별도의 서버 생성

으로 하여 별도의 서버를 어떻게 생성할지 결정할 수 있다.

언리얼 에디터에서 접근 가능한 멀티플레이 옵션, Dedicated-Server는 플레이 가능하지 않으므로 여기에서는 표시되지 않는다.

 

추후 계속해서 공부하면서 알게 될 개념이지만, 언리얼 엔진은 서버와 클라이언트 모두 같은 코드를 사용한다. 이 때문에, 만일 언리얼 엔진을 공부하고, 이를 통해 취업 혹은 대규모 프로젝트를 개발하고자 한다면 네트워크부터 공부한느 것이 유리하다.

 

그리고, 언리얼 엔진을 공부하기 앞서 다음 영상을 한번 보면서 프레임 워크에 대해 흐름을 파악하고, 공부가 진행될 때 마다 한번씩 봐두면 매우매우매우매우 도움이 될 것이다.