Unreal Engine/기능 구현 / / 2025. 7. 23. 15:09

[Unreal Engine 5] 클라이언트 중 서버로 RPC를 보낼 수 있는 대상

반응형

언리얼 엔진은 RPC를 이용해서 손쉽게 네트워크 동기화를 구현할 수 있다.

 

클라이언트가 서버로 요청하면 다른 클라이언트에게 명령하여 전체 동기화를 진행하고

서버가 특정 클라이언트에 명령하면 해당 클라이언트만 적용되는 방식이다.

 

그런데, 서버는 모든 클라이언트의 요청을 들어주지 않는다.

 

조건이 있다.

이 조건을 이해하지 못하면 서버는 요청을 무시한다.

 

서버에서 서버로 요청하는 것은 모두 허용된다.

그런데 클라이언트가 문제다.

 

클라이언트는 특정 대상만이 서버에게 요청할 수 있다.

1. Pawn 또는 Character

2. PlayerController

3. PlayerState

4. 플레이어가 소유한 다른 Actor

 

클라이언트이지만 캐릭터는 서버에 요청을 보낼 수 있다.

이건 당연한 사실이다.

 

클라이언트가 움직이면 당연히 서버는 요청을 받아서 다른 클라이언트 화면에도 동일하게 이동처리를 하여 동기화를 시켜줘야 한다.

그렇기 때문에 캐릭터는 동기화 요청을 당연히 보낼 수 있고 서버는 이를 수락한다.

 

그 다음으로는 플레이어 컨트롤러이다.

사실상 컨트롤러는 게임 유저 그 자체이다. 

유저의 입력을 처리하는 존재다. 당연히 유저의 입력을 받아 캐릭터를 통제하기 때문에 서버로 요청할 수 있어야 한다.

 

그렇다면 나머지 대상들도 공통점이 있다.

즉, 클라이언트 유저가 통제할 수 있는 대상이면 모두 서버로 RPC 요청을 보낼 수 있다.

클라이언트 유저가 통제할 수 있다의 기준은 무엇인가?

클라이언트가 소유한 것들을 말한다.

 

즉 소유권이 클라이언트 유저에게 있으면 그건 서버로 RPC를 보낼 수 있는 대상이 된다.

그렇다면 소유권이란 무엇인가?

 

캐릭터에게 attach된 액터들은 나의 소유인가?

캐릭터 클래스에 선언된 객체들이 나의 소유인가?

 

아니다. 월드에 스폰할 때 소유권을 설정한 대상만 나의 소유이다.

 

그리고 결국 RPC는 캐릭터를 소유한 PlayerController의 허락이 필요하다.

PlayerContoller가 소유권 검사를 통해 자신이 소유한 대상이 아니라면 서버로의 요청은 무시된다.

 

 

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유