RPC¶
액터의 속성과 상태, 위치를 동기화하는 것은 정확하고 자연스러운 멀티플레이어 환경 확보를 위해 중요합니다. 그러나 플레이어가 행하는 동작도 동기화해야 합니다.
값이 특정 동작을 표시하기 위해 변하는지 폴링할 수 있지만 대부분은 동작을 다른 플레이어에게 전달하여 관련 함수를 호출하게 하는 것이 더 좋습니다.
RPC는 함수 시그니처와 옵션 인수를 포함하고 있는 플레이어 간에 주고 받는 메시지입니다. 이것으로 다른 플레이어의 월드에 있는 액터에 바로 메서드 호출이 가능합니다.
Strix는 각종 RPC 관련 함수로 이것을 지원합니다.
RPC 등록하기¶
참고
RPC 등록은 소유자와 레플리카 액터 모두에서 일어나야 합니다.
액터 블루프린트에 있는 함수는 RPC 기능으로 등록할 수 있습니다. 등록된 함수의 함수 이름이 들어 있는 RPC 메시지를 받으면 그 함수가 호출됩니다.
Register Strix RPC 함수를 호출하면 등록이 끝납니다.
Register Strix RPC 함수는 Strix Replicator 요소가 제공하는 On Sync Begin 이벤트에서 호출할 수 있습니다(복제 참조). 이렇게 하면 이 액터의 내부 네트워크 개체와 타입 ID가 올바르게 만들어집니다.
Register Strix RPC 함수는 다음과 같은 인수를 취합니다.
Target |
액터 개체 참조 |
RPC의 수신인으로 등록할 액터.
등록된 함수가 있는 RPC를 수신하면 이 액터가 함수 호출의 대상이 됩니다.
self로 회귀.
|
|
Function Name |
String |
등록할 함수의 UE 이름. 내 블루프린트에서 함수 아래에 나와 있는 것과 같습니다.
Target 개체에서 이용할 수 있고 스트링이 정확히 일치해야 합니다.
|
RPC 전송¶
액터가 RPC의 함수를 등록했다면 그 액터에서 RPC를 보낼 수 있습니다. RPC를 전송할 때는 Target과 Function Name이 필요합니다. 함수 이름은 (위와 같이) 등록된 것과 같습니다. Target은 소유자 및/또는 레플리카가 RPC를 받는 액터를 말합니다.
Send Rpc¶
특정 멤버에게 RPC를 보냅니다. 멤버는 Strix Room Member 스트럭트이며, RPC를 보낼 클라이언트를 결정합니다. 이 정보를 획득하는 방법은 현재 방 멤버 정보 가져오기를 참조해 주십시오.
Send Rpc to All¶
이 멤버를 포함하여 방 멤버 전원에게 RPC를 보냅니다.
Send Rpc to Other Members¶
이 멤버를 제외하고 방 멤버 전원에게 RPC를 보냅니다.
RPC 인수¶
Strix Relay Arg 스트럭트는 모두 몇 가지 인수를 취할 수 있습니다. 이 스트럭트들은 함수 RPC가 호출하는 함수에 입력할 수 있는 인수를 래퍼에 제공합니다.
참고
Strix는 RPC를 보낼 때 특정 함수 시그니처에 대해 인수 배열이 유효한지 확인하지 않습니다. 인수 시그니처가 올바른지 주의해야 합니다. 바르지 않으면 RPC 수신에 실패할 수 있습니다.
Args의 배열은 특정 함수의 인수를 순서대로 나타냅니다. 함수에 인수가 하나뿐이어도 인수는 배열 안에 있어야 합니다.
일반 값을 Strix Relay Args로 변환하려면 그 값을 드래그하고, 값 타입에 ToStrixRelayArg를 이용하면 됩니다. 변환 노드의 결과 아웃풋은 Strix Relay Arg 타입이며, RPC 함수의 인풋으로 드래그하면 됩니다. (배열 변환이 자동으로 일어납니다.)
Strix에서는 기본 Unreal 타입과 컨테이너에 대하여 몇 가지 타입 변환이 가능합니다. 블루프린트 동작 메뉴에 ToStrixRelayArg를 입력하여 가용한 타입을 확인하거나 직렬화 가능 RPC 인수에서 목록을 확인해 주십시오.
RPC 컨텍스트¶
Strix에는 Strix Rpc Context라고 하는 타입이 포함되어 있습니다. 그리고 이 타입에는 다음 멤버가 포함되어 있습니다.
SenderMemberId |
int |
|
RPC 발송인의 멤버 ID |
||
RoomId |
int |
|
이 RPC를 보낸 방의 ID |
보낸 사람을 비롯하여 RPC에 관한 컨텍스트 정보를 알고 싶어 하는 사람이 있을 수 있습니다.
함수 시그니처에 다음과 같은 컨텍스트 인수가 포함되어 있다고 가정하겠습니다.
func(..., FStrixRpcContext context, ...)
Strix는 그 함수로 호출된 RPC에 RPC 컨텍스트를 자동으로 입력합니다.
참고
RPC 컨텍스트는 해당 함수에 대한 Strix 릴레이 arg의 목록에 산입되지 않습니다. 예를 들어, 함수 시그니처가 (int32, FStrixRpcContext, bool)이라면 Send RPC 함수는 인수로 int32, bool을 취해야 합니다. 호출되면 Strix가 컨텍스트를 함수로 보냅니다.