언리얼 멀티플레이

RPC

hyk 2023. 4. 2. 20:09

RPC(Remote Procedure Call)이란 언리얼의 멀티 플레이 개발 기술 중 하나로 서버와 클라이언트 사이의 객체 상태를 동기화하기 위해 사용한다.

기본적으로 호출되는 곳과 실행되는 곳이 다르다.

값이 변경될 때마다 리플리케이트 하는 프로퍼티 업데이트와는 달리 실행될 때만 리플리케이트를 한다.

 

Client, Server, NetMulticast 3 가지의 RPC가 있다.

각각 UFUNCTION의 키워드로 추가하여 사용한다.

 

Client는 서버에서 호출되어 클라이언트에서 실행된다.

Server는 클라이언트에서 호출되어 서버에서 실행된다.

NetMulticast는 서버에서 호출되어 서버와 모든 클라이언트에서 실행된다.

 

RPC의 정상 작동을 위한 조건 및 주의사항은 다음과 같다.

  • Actor 에서 호출되어야 한다.
  • Actor 는 반드시 replicated 여야 한다.
  • 서버에서 호출되고 클라이언트에서 실행되는 RPC 의 경우, 해당 Actor 를 실제 소유하고 있는 클라이언트에서만 함수가 실행된다.
  • 클라이언트에서 호출되고 서버에서 실행되는 RPC 의 경우, 클라이언트는 RPC 가 호출되는 Actor 를 소유해야 한다.
  • Multicast RPC 는 예외다:
    서버에서 호출되는 경우, 서버에서는 로컬에서 실행될 뿐만 아니라 현재 연결된 모든 클라이언트에서도 실행된다.
    클라이언트에서 호출되는 경우, 로컬에서만 실행되며, 서버에서는 실행되지 않는다.
    현재 멀티캐스트 이벤트에 대해 단순한 스로틀 조절 메카니즘이 있다. 멀티캐스트 함수는 주어진 액터의 네트워크 업데이트 기간동안 두 번 이상 리플리케이트되지 않는다.

다음 표는 호출 액터의 소유권에 따라 주어진 유형의 RPC 실행 위치를 나타낸다.

서버에서 호출된 RPC

액터 소유권 리플리케이트 안됨 NetMulticast 서버 클라이언트
클라이언트 소유 액터 서버에서 실행 서버와 모든 클라이언트에서 실행 서버에서 실행 액터의 소유 클라이언트에서 실행
서버 소유 액터 서버에서 실행 서버와 클라이언트에서 실행 서버에서 실행 서버에서 실행
미소유 액터 서버에서 실행 서버와 모든 클라이언트에서 실행 서버에서 실행 서버에서 실행

클라이언트에서 호출된 RPC

액터 소유권 리플리케이트 안됨 NetMulticast 서버 클라이언트
호출하는 클라이언트에 소유 호출하는 클라이언트에서 실행 호출하는 클라이언트에서 실행 서버에서 실행 호출하는 클라이언트에서 실행
다른 클라이언트에 소유 호출하는 클라이언트에서 실행 호출하는 클라이언트에서 실행 드롭됨 호출하는 클라이언트에서 실행
서버 소유 액터 호출하는 클라이언트에서 실행 호출하는 클라이언트에서 실행 드롭됨 호출하는 클라이언트에서 실행
미소유 액터 호출하는 클라이언트에서 실행 호출하는 클라이언트에서 실행 드롭됨 호출하는 클라이언트에서 실행

'언리얼 멀티플레이' 카테고리의 다른 글

Reliable, WithValidation 옵션  (0) 2023.04.04