Actor Property
- 기본적으로 Unreliable하고 Single Bunch로 전송된다.
- Single Bunch에 Unreliable하기 때문에 다른 RPC보다는 나중에 전송된다.
- 하지만 ForceQueue RPC보다는 먼저 전송된다.
Replicated Using Order
- 서로 다른 Replicated Property에 대한 RepNotify의 순서는 명확하게 정해진 것이 없다.
- 클라이언트 상에서 Property의 Dirty 마킹 순서나 메모리상 위치와 아무런 연관이 없다.
- 때문에 몇몇 Property가 동시에 Replicated 되어야 한다면 Struct로 묶어서 관리하는 것을 권장한다.
- 만약 Gameplay에 중요한 Replicated Property가 있다면,
RepNotify를 구현해 Property의 변경사항을 프레임 단위로 대응 하는 것이 좋다.- Replication을 통해 변경된 값을 전달받고 RepNotify가 호출된 후에,
UObject::PostRepNotifies 함수에서 변경사항을 처리할 수 있다. - 이 때, 변경된 값이 사용될 준비가 될 때까지 각각의 RepNotify에 저장하는 것이 좋다.
- Replication을 통해 변경된 값을 전달받고 RepNotify가 호출된 후에,
RPC
- RPC에 대한 대전제는 다음과 같다.
- Reliable이 Unreliable보다 먼저 전송된다.
- Unicast는 Reliability와 무관하게 가장 먼저 전송된다.
Order Accross Actors
- Replicated Actor에 대한 RPC 호출에 대해서는 명확한 법칙이 없다.
- 때문에 RPC 함수 호출 순서와 실제 RPC 전달 순서는 일치하지 않는다.
Order Inside an Actor
- Replication System은 동일한 Actor에 대한 reliable RPC 호출의 순서는 보장해준다.
- 이는 Actor의 Subobject에도 적용된다.
- 이는 reliable RPC의 경우, 함수를 호출한 순서와 실제 RPC의 전달 순서가 일치한다.
Unreliable VS Reliable
- Unreliable RPC와 Reliable RPC가 섞여 있을 때에는 순서가 보장되는 것처럼 보이지만, 실상은 보장되지 않는다.
- Packet 손실이나 재배치가 일어나지 않는다면, Unreliable RPC와 Reliable RPC의 전달 순서는 호출 순서와 일치한다.
- 하지만 손실/재배치가 일어나면 순서가 달라지게 된다.
- 정확히는 Reliable RPC끼리는 호출 순서와 전달 순서가 일치한다.
Multicast VS Unicast
- Multicast RPC와 Unicast RPC가 섞여 있을 때에는 항상 호출 순서와 전송 순서가 일치하지는 않아 더욱 복잡하다.
Reliable Multicast
- Reliable Multicast의 경우 Reliable Unicast와 섞여 있을 경우 호출 순서와 전송 순서가 일치한다.
Unreliable Multicast
- Unreliable Multicast의 경우는 절대로 다른 Reliable/Unreliable Multicast와의 순서를 보장해주지 않는다.
RPC Send Policy
- ERemoteFunctionSendPolicy를 정의하여 Send Policy를 명시해 RPC의 전송 순서에 영향을 줄 수 있다.
https://redchiken.tistory.com/389
Force Send
- Unreliable Multicast RPC의 순서를 바꾸고 이들이 Queue되는 것을 방지한다.
- 여기서 Queue 되지 않는다는 것은 대기하지 않고 바로 전송이 된다는 의미이다.
Force Queue
- 다른 Force Queue RPC와 Unreliable Multicast를 제외한 RPC와의 순서를 보장하지 않는다.
- 이 말은 ForceQueue, Unreliable Multicast와는 절대적인 순서가 보장된다는 의미이다.
Order Between RPCs and Actor Properties
- RPC와 Property Replicate 사이에는 대략 다음과 같은 규칙이 적용된다.
- RPC가 먼저 실행된다.
- 그리고 Property가 나중에 update된다.
- Property Replicate는 단일의 Unreliable 데이터 단위로 전송된다.
- Bunch Payload는 다음 규칙을 따라 생성된다.
- Queue 되지 않은 PRC 직렬화
- Replicated Property 직렬화
- Queue 된 RPC 직렬화
- 이로 인해 한가지 주의해야 할 점이 있다.
- RPC 내부에서 변경된 Replicated Property의 값이 뒤이어 발생할 Property Replicate에 의해 손실 될 수 있다.
'UE5 > Network' 카테고리의 다른 글
[Network] Remote Procedure Calls(RPCs) (0) | 2024.06.28 |
---|---|
[Network] Property Replication (1) | 2024.06.28 |
[Network] Network Property (0) | 2024.06.25 |
[Network] Network Driver (0) | 2024.06.18 |
[Network] DemoNetDriver 및 Streamer (0) | 2024.06.17 |