Unreal/Blueprint
[UE4] 멀티 플레이 이벤트 복제 방법 (Replicate)
혜멘
2022. 2. 11. 16:10
Replication 개념
- 클라이언트에서 서버에 복제 명령 ▶ 서버에서 클라이언트들에 전달 ▶ 모든 클라이언트에서 실행
Role / Remote Role
- 실행되는 주체가 서버인지, 클라이언트인지 구분하여 각각에서 실행될 이벤트를 제어
- 서버 (ROLE_Authority) / 클라이언트 (ROLE_SimulatedProxy)
- 자신은 Role, 상대는 RemoteRole (ex. 서버는 Role 값이 ROLE_Authority, RomoteRole 값이 ROLE_SimulatiedProxy)
아래는 각각 블루프린트와 C++ 스크립트에서의 Replicate 구현 방법이다.
[Blueprint Replicate]
1. 복제할 이벤트 노드의 디테일 패널에서 Replicates - multicast 로 설정
2. Replicates - Run on server 타입 이벤트에서 복제할 이벤트 (multicast) 호출
3. 이벤트를 실행하고 싶은 곳에서 Server Event 이벤트 호출
참고로 Replicate는 플레이어가 소유하고 있는 액터에서만 실행할 수 있다.
따라서 이벤트 구현은 반드시 player controller 혹은 컨트롤러와 연결된 액터에 구현하여야 한다. (ex. pawn)
다만 서버에 복제 명령을 전달하는 과정(3번)은 어느 곳에서 하든 상관없다.
[C++ Replicate]
헤더파일.h
int num;
void SetInt(int n);
UFUNCTION(reliable, server, WithValidation)
void ServerSetInt(int n);
실행파일.cpp
void AMyController::SetInt(int n)
{
// 클라이언트 변수에 값 할당
num = n;
// 클라이언트인지 서버인지 구분
if (Role == ROLE_SimulatedProxy)
{
ServerSetInt(n);
}
}
bool AMyController::ServerSetInt_Validate(int n)
{
return true;
}
void AMyController::ServerSetInt_Implementation(int n)
{
// 클라이언트가 네트워크를 통해 호출한 서버에서 실행되는 함수 (Role == ROLE_Authority)
// 서버에서 실행되므로 아래 함수에서는 ServerSetInt가 실행되지 않고 변수값만 변경
SetInt(n);
}