-
[UE5] RPC(Remote Procedure Call)UE5 2024. 12. 17. 05:45
RPC(Remote Procedure Call)이란?
- 원격 프로시저(함수) 호출의 약자
- 원격 컴퓨터에 있는 함수를 호출할 수 있도록 만든 통신 프로토콜
- 네트워크 멀리플레이에서 서버와 클라이언트간에 빠르게 행동을 명령하고 정보를 주고받는데 사용
- 언리얼 엔진에서 클라이언트에서 서버로 통신하는 유일한 수단 제공
- 속성형 장식이나 휘발성인 비신뢰성 게임플레이를 위한 것(사운드 재생, 파티클 스폰 등) 액터의 핵심적인 기능과는 무관한 일시적 효과와 같은 작업을 하는 이벤트를 처리
Client RPC
- 서버에서 클라이언트로 호출하는 RPC
- 이를 활용해 특정 클라이언트에게만 명령을 보낼 수 있음
- 서버에서 명령을 보낼 클라이언트의 커넥션을 소유한 액터를 사용해야 함(AActor::GetNetConnection)
- 대부분의 경우 서버, 클라이언트의 두 액터는 모두 플레이어 컨트롤러
- 클라이언트의 경우는 특별한 autonomous proxy역할을 가진 플레이어 컨트롤러 액터
- 반드시 전달되어야하는 명령이 아니라면 가급적 Unreliable 속성을 사용하는 것이 좋음
// Server UFUNCTION(Client, Unreliable) ClientRPCFunction() // Client ClientRPCFunction_Implementation()
Server RPC
- 클라이언트에서 서버로 호출하는 RPC
- 언리얼 엔진 구조에서 유일하게 클라이언트가 서버의 함수를 호출 할 수 있는 기능
- 서버쪽에서 클라이언트의 명령을 검증할 수 있는 함수를 구현할 수 있음
- Client RPC와 동일하게 서버와의 커넥션을 소유한 액터를 사용해야 함
- 서버 RPC에는 WithValidation이라고 하는 클라이언트가 보낸 명령이 악의적인 것인지 판단하는 키워드 사용
// Server ServerRPCFunction_Validate() ServerRPCFunction_Implemetation() // Client UFUNCTION(Server, Unreliable, WithValidation) ServerRPCFunction()
NetMulticast RPC
- 서버를 포함해 모든 플레이어에게 명령을 보내는 RPC
- 프로퍼티 리플리케이션과 유사하게 연관성 기반으로 동작함(커넥션을 소유하지 않아도 동작)
- 프로퍼티 리플리케이션과 유사하지만 다른 용도로 사용
// Server UFUNCTION(NetMulticast, Unreliable) MulticastRPCFunction() MulticastRPCFunction_Implementation() // Client1 MulticastRPCFunction_Implementation() // Client2 MulticastRPCFunction_Implementation()
키워드 정리
- Unreliable : RPC 호출을 보장하지 않는 옵션. 빠름
- 데이터 전송을 보장하지 않지만 빠르게 계속 보낼 수 잇어 움직임에 필요한 데이터를 빈번하게 전달함으로써 부드러운 움직임을 구현할 수 있도록 도와줌
- Relialbe : RPC 호출을 보장해주는 추가 옵션. 정말 필요한 때만 호출
- 데이터 전송을 보장하기 위해서 내부적으로 보낸 패킷이 잘 도착했는지 서로 확인하는 작업 필요
- WithValidation : 서버에서 검증 로직을 추가로 구현할 때 추가하는 옵션
- 문법적으로는 모든 RPC에 사용이 가능하지만 실질적으로 서버 RPC에서만 사용
- 왜냐하면 서버 RPC만이 RPC를 호출한 결과가 서버에서 구동되기 때문
'UE5' 카테고리의 다른 글
[UE5] 전역 네임스페이스와 ::의 활용 (0) 2024.12.19 [UE5] RPC 사용시 주의할 점 (0) 2024.12.17 [UE5] 액터 리플리케이션 (0) 2024.12.17 [UE5] 클라이언트-서버 연결시 호출 함수 정리 (0) 2024.12.12 [UE5] 매크로를 이용한 사용자 정의 로그 (2) 2024.12.10