https://dev.epicgames.com/documentation/ko-kr/unreal-engine/replicated-object-execution-order-in-unreal-engine?application_version=5.3

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에 저장하는 것이 좋다.

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

 

[Network] Remote Procedure Calls(RPCs)

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/remote-procedure-calls-in-unreal-engine?application_version=5.3RPCLocal 단위에서 호출하여 Remote로 연결된 1개 이상의 Machinge에서 실행되는 함수Return이 없는 단방향

redchiken.tistory.com

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

+ Recent posts