언리얼 엔진의 네트워킹 개요
멀티플레이어용 네트워크 게임 구성하기
dev.epicgames.com
언리얼 공식 홈페이지를 참고하여 작성한 문서입니다. (영문 버전)
언리얼 엔진을 이용해 만들어진 유명 게임들이 많습니다. 우리나라에서는 최근 언리얼 엔진 5를 사용해 가장 먼저 시장에 선보인 위메이드사의 <나이트 크로우>를 비롯해, 넥슨(니트로 스튜디오)사의 <카트라이드 : 드리프트> 등 그래픽이 잘 뽑혔다 라고 말하는 게임류의 절반은 언리얼 엔진으로 개발되었습니다.
이렇게 많은 게임들이 언리얼 엔진을 이용하는데엔 그래픽적 이점이 있기도 하지만, 강력한 네트워킹 프레임워크를 갖추고 있어 플레이어 간 정보를 공유하는 섬세한 과정에 대한 비용을 에디터에서 간소화할 수 있다는 이점 때문이기도 합니다.
언리얼 엔진에서는 게임을 만들기 시작할 단계부터 멀티플레이어를 염두에 두고 제작을 진행하라고 권장합니다. 싱글플레이어 게임을 제작하다가 멀티플레이어 게임으로 제작 목표가 바뀌게 되면 프로젝트 전체를 처음부터 다시 개발해야하는 큰 비용이 생긴다고 경고합니다. 또한 네트워크 속도와 안정성으로 인해 발생할 수 있는 기술적 병목 현상에도 대비할 수가 없습니다.
클라이언트 - 서버 모델
싱글 플레이어 게임
싱글 플레이어 게임 프로그램이 내 컴퓨터에서 돌아갑니다. 다른 유저는 등장하지 않으므로 서버가 필요 없다고 생각할지도 모르겠습니다. 하지만 요즘 나오는 게임의 경우, 서버에 게임 플레이 내용을 저장하거나 다른 유저들의 진행 내역을 확인할 수 있는 랭킹 시스템을 보기 위해 서버가 필요한 싱글 플레이어 게임도 있습니다.
싱글 플레이어 게임에서의 동작 프로그램은 게임 인스턴스라고 하는 인스턴스가 관리하며, 인스턴스가 만들어놓은 테두리 안에 월드(캐릭터, 액터들)라는 컨텐츠가 담기게 됩니다. 이러한 싱글 플레이어 게임 방식을 스탠드얼론(자립 방식)이라고도 합니다.
로컬 멀티플레이어 게임
하나의 화면에서 다수의 컨트롤러로 즐기는 게임으로, 화면을 분할시킬 수도 있으며 로컬로 실행됩니다.
네트워크 멀티플레이어 게임
하나의 서버, 다수의 클라이언트로 구성되어 있는 특징을 가지고 있습니다. 이 때 서버는 강력한 권한을 가지고 있어서, 서버는 실제 컨텐츠를 제공하는 머신이라고 생각하면 됩니다. (서버 자체만으로도 독립적으로 게임이 가능한 기능들을 가지고 있으므로 자립이 가능한 <스탠드얼론>의 형태를 띄고 있습니다.)
네트워크에 있는 한 대의 컴퓨터가 서버(주인) 역할을 하며 호스팅하고, 다른 플레이어들은 클라이언트로서 서버에 연결됩니다. 서버는 연결된 각 클라이언트와 게임의 상태 정보를 공유하고 통신할 수 있는 수단을 제공합니다. 이 때 서버는 호스트(주인)으로서 가장 진실된 판정을 하여, 그 판정된 내용을 토대로 클라이언트에게 게임 상태, 정보를 전달해주는 역할을 합니다.
클라이언트는 서버에서 전달해주는 정보들을 통해 전달받은 컨텐츠를 복제해 화면에 띄우는 역할을 합니다. 클라이언트마다 독립적인 게임 인스턴스를 가지며, 여러가지 액터들 중에서 접속을 담당하는 액터인 접속 주체(플레이어)를 지정합니다. 서버로부터 전달받은 내용인 복제된 허상(Proxy, 대리자) 컨텐츠를 실행하는 환경만 제공합니다.
또 자신의 캐릭터를 제어하여 게임 내에서 동작을 수행하고, 서버에 자신의 행동에 대한 신호를 보내줍니다. 예를 들어, 클라이언트에서 아이템 패키지 상품을 구매하는 키를 눌렀을 때, 구매 희망 여부와 해당 상품 정보를 서버에게 전달합니다. 그러면 서버 내에서는 실제로 전달된 내용을 기반으로 상품 구매에 대한 조건을 체크하는 중요한 판정을 합니다.
해당 아이템 상품을 살 수 있는 레벨인가?
상품을 살 수 있는 만큼의 게임 머니를 가지고 있는가?
비슷한 시간 내에 구매를 한 적 있는, 중복 구매인가?
아직 상점에 남아있는 상품이 맞는가?
기타 등등..
서버 내에서 구매가 완료되면, 그 판정 내용을 클라이언트에 보내주어 해당 구매 상품이 구매 완료되었음을 띄워줍니다. 이해하기 쉽도록 상품 구매에 대한 예시를 들었으나, 서버에서 판단하는 중요한 정보들은 캐릭터 위치, 상태 이상, 등 다양한 것들이 있습니다.
참고. 이득우의 언리얼 프로그래밍 - 언리얼 네트웍 멀티플레이어 프레임웍 (인프런)
'게임개발 > ue server' 카테고리의 다른 글
[UE] 언리얼 엔진의 커넥션 구성 (0) | 2024.06.16 |
---|---|
[UE] 네트워크 모드에서의 액터의 준비와 게임 시작 (1) | 2024.06.16 |
[UE] 게임 모드와 플레이어 컨트롤러를 활용한 로그인 플로우의 이해 (0) | 2024.05.08 |
[UE] 어플리케이션의 네트워크 모드 파악하기 (0) | 2024.04.29 |
[UE] 언리얼 엔진의 멀티플레이어 게임 프레임워크 특징과 네트워크 프로그래밍에서 BP가 아닌 C++을 사용해야 하는 이유 (0) | 2024.04.28 |