[UE] 멀티 플레이 네트워크
리플리케이션 (Replication)
서버와 클라이언트 사이에서 데이터와 명령을 주고 받는 프로세스이다.
서버
서버란 클라이언트에게 네트워크를 통해 서비스하는 컴퓨터를 의미한다. 게임에서 호스팅 역할을 하며 게임 관련 규칙이나 플레이가 돌가나는 방식을 결정하는데 영향을 주는 무엇이든 서버에서만 일어난다.
언리얼 엔진 서버
언리얼 엔진 내에서는 데디케이티드서버(Dedicated Server)와 리슨서버(Listen Server) 네트워크 방식의 유형이 있으며 각각 차이와 장단점을 가지고있다.
서버 | 구성 | 특징 | 설명 |
데디케이티드 서버 |
호스트를 담당하는 서버 + 여러명의 클라이언트 |
1. 입력을 받거나 렌더링 되지 않는다. 2. 다른 클라이언트가 참가하는 전용 서버 역할을 한다. |
서버를 담당하는 컴퓨터가 계속 켜져있어야 하며 24시간 하루종일 돌아가야하는 게임일 경우에 사용한다. |
리슨 서버 | 클라이언트 중 한명이 호스트 + 여러명의 클라이언트 |
1. 호스트가 하는 게임을 입력하고 렌더링이 된다. 2. 호스트가 서버도 호스팅하며 클라이언트도 실행한다. |
방을 만들어서 시작하는 게임일 경우에 사용하며, 호스트의 컴퓨터가 좋지않으면 전체적으로 영향을 받으며 보안의 취약하다. |
언리얼 엔진 리플리케이트 함수
RPC (Remote Procedure Call)
로컬에서 호출되지만 다른 머신에서 원격 실행되는 함수를 말한다. 즉, 네트워크 연결을 통해 클라이언트와 서버사이에 메시지를 전송할 수 있는 함수를 의미한다.
RPC 함수는 서버, 클라이언트, 멀티캐스트 3가지 종류가 있으며, Actor에서 만 호출되어야 하며 반드시 Actor는 Replicated여야 한다.
함수 | 관계도 | 서버에서 호출 | 클라이언트에서 호출 | 비고 |
서버에서 실행 (Run on Server) |
![]() |
서버쪽에서 바로 실행된다. | 액터의 소유주일 경우 서버에서 실행, 그 외는 드롭 |
|
소유중인 클라이언트에서 실행 (Run on owning Client) |
![]() |
액터의 소유 클라이언트에서 실행된다. | 호출하는 클라이언트에서 실행 | |
멀티캐스트 (Multicast) |
![]() |
서버와 모든 클라이언트에서 실행된다. | 호출하는 클라이언트에서 실행 | 전달량이 많은 경우, 보호하는 엔진 기능이있다. |
신뢰성 (Reliable)
리플레이키드 함수들은 신뢰성 설정이 가능하다. 신뢰성이 설정되어 있다면 함수의 실행이 보장이 되지만 그렇지 않다면 트래픽이 심한 경우 실행되지 않을 수 있다.
RPC 코드 샘플
//소유중인 클라이언트에서 실행
UFUNCTION(Client)
void ClientRPCFunction();
//서버에서 실행
UFUNCTION(Server)
void ServerRPCFuncion();
//멀티캐스트
UFUNCTION(NetMulticast)
void MulticastRPCFunction();
//신뢰성 설정
UFUNCTION(Client, Reliabe)
void ClientRPCFunction();
언리얼 엔진에서 멀티플레이를 개발 시 서버는 크게 데디케이트서버와 리슨서버 두가지가 있으며, 한 클라이언트가 서버를 가지고 호스트가 되는 것이 리슨서버이며 서버는 별개로 존재하고 클라이언트가 그 서버를 이용하는 방식이 데디케이트서버이다.