언리얼 엔진은 RPC를 이용해서 손쉽게 네트워크 동기화를 구현할 수 있다.
클라이언트가 서버로 요청하면 다른 클라이언트에게 명령하여 전체 동기화를 진행하고
서버가 특정 클라이언트에 명령하면 해당 클라이언트만 적용되는 방식이다.
그런데, 서버는 모든 클라이언트의 요청을 들어주지 않는다.
조건이 있다.
이 조건을 이해하지 못하면 서버는 요청을 무시한다.
서버에서 서버로 요청하는 것은 모두 허용된다.
그런데 클라이언트가 문제다.
클라이언트는 특정 대상만이 서버에게 요청할 수 있다.
1. Pawn 또는 Character
2. PlayerController
3. PlayerState
4. 플레이어가 소유한 다른 Actor
클라이언트이지만 캐릭터는 서버에 요청을 보낼 수 있다.
이건 당연한 사실이다.
클라이언트가 움직이면 당연히 서버는 요청을 받아서 다른 클라이언트 화면에도 동일하게 이동처리를 하여 동기화를 시켜줘야 한다.
그렇기 때문에 캐릭터는 동기화 요청을 당연히 보낼 수 있고 서버는 이를 수락한다.
그 다음으로는 플레이어 컨트롤러이다.
사실상 컨트롤러는 게임 유저 그 자체이다.
유저의 입력을 처리하는 존재다. 당연히 유저의 입력을 받아 캐릭터를 통제하기 때문에 서버로 요청할 수 있어야 한다.
그렇다면 나머지 대상들도 공통점이 있다.
즉, 클라이언트 유저가 통제할 수 있는 대상이면 모두 서버로 RPC 요청을 보낼 수 있다.
클라이언트 유저가 통제할 수 있다의 기준은 무엇인가?
클라이언트가 소유한 것들을 말한다.
즉 소유권이 클라이언트 유저에게 있으면 그건 서버로 RPC를 보낼 수 있는 대상이 된다.
그렇다면 소유권이란 무엇인가?
캐릭터에게 attach된 액터들은 나의 소유인가?
캐릭터 클래스에 선언된 객체들이 나의 소유인가?
아니다. 월드에 스폰할 때 소유권을 설정한 대상만 나의 소유이다.
그리고 결국 RPC는 캐릭터를 소유한 PlayerController의 허락이 필요하다.
PlayerContoller가 소유권 검사를 통해 자신이 소유한 대상이 아니라면 서버로의 요청은 무시된다.
'Unreal Engine > 기능 구현' 카테고리의 다른 글
| [Unreal Engine 5] 프로젝트 설정(1) - 클래스 생성, 캐릭터 및 카메라 생성 (0) | 2025.08.23 |
|---|---|
| [Unreal Engine 5] TSoftObject vs UObject (0) | 2025.07.26 |
| [Unreal Engine 5] Pawn과 PlayerController의 관계 (0) | 2025.07.23 |
| [Unreal Engine 5] 토큰 저장 : LocalPlayerSubsystem (0) | 2025.07.21 |
| [Unreal Engine 5] FString과 FName, FText의 역할 (0) | 2025.07.14 |
