This document is about: FUSION 2-SHARED
SWITCH TO

원격 프로시저 호출

소개

RPC(원격 프로시저 호출)는 특정 이벤트를 네트워크 클라이언트 간에 공유하기에 이상적입니다. 반면에, [Networked] 속성은 지속적으로 변하는 상태를 공유하는 데 적합한 기본 솔루션입니다.

RPC 생성

NetworkObjectNetworkBehaviour에서 RPC를 정의하려면 다음 단계를 따르세요:

  1. 반환 타입이 void 또는 RpcInvokeInfo인 일반 C# 메서드를 선언합니다(아래 문서화됨).
  2. 메서드 이름 앞뒤에 "RPC"를 추가합니다(대소문자 구분 없음).
  3. 메서드 선언 앞에 [Rpc] 속성을 추가합니다.
  4. RpcSourcesRpcTargets 매개변수를 설정하여 RPC 호출 위치와 실행 위치를 제어합니다.

C#

[Rpc(sources: RpcSources.InputAuthority, targets: RpcTargets.StateAuthority)]
public void RPC_Configure(string name, Color color){
    playerName = name;
    playerColor = color;
}
중요

RPC는 작동하려면 메서드 이름에 "RPC" 접두사 또는 접미사가 필요합니다.

정적 RPC

정적 RPC는 약간의 다른 규칙을 따릅니다:

  • RpcSourcesRpcTargets 매개변수를 무시합니다.
  • 메서드의 첫 번째 매개변수는 NetworkRunner여야 합니다.

정적 RPC는 소스와 대상 필터가 없기 때문에 모든 클라이언트에서 호출될 수 있으며 모든 클라이언트로 전송됩니다. 그러나 특정 PlayerRef를 대상으로 지정하여 호출 대상을 제어할 수 있습니다(Targeted RPC 참조).

C#

[Rpc]
public static void Rpc_MyStaticRpc(NetworkRunner runner, int a) { }

RPC 속성 매개변수

Sources와 Targets

RpcSourcesRpcTargets는 필터 역할을 합니다. RpcSources는 RPC를 보낼 수 있는 피어를 정의하고, RpcTargets는 실행될 피어를 정의합니다.

  • All: 세션 내 모든 피어(해당 RPC를 호출한 클라이언트를 포함)가 보낼 수 있으며, 실행됩니다.
  • Proxies: 해당 객체에 상태 권한(State Authority)이 없는 피어가 보낼 수 있으며, 실행됩니다.
  • StateAuthority: 해당 객체에 상태 권한(State Authority)을 가진 피어가 보낼 수 있으며, 실행됩니다.

중요: RPC는 명시적 상태를 가지지 않습니다. 늦게 접속한 클라이언트와 연결이 끊긴 후 다시 연결된 클라이언트는 RPC가 발생한 사실을 잊게 됩니다. 따라서 RPC는 반드시 다음 중 하나를 보장해야 합니다:

  • 실제로 상태를 가지지 않는 일시적인 작업(예: 채팅 메시지)일 것.
  • 또는, 간접적으로 [Networked] 속성에 효과를 기록할 것.

C#

public class Player : NetworkBehaviour {
    [Networked] public string playerName { get; set; }
    [Networked] public Color playerColor { get; set; }
    
    [Rpc(RpcSources.InputAuthority, RpcTargets.StateAuthority)]
    public void RPC_Configure(string name, Color color) {
        playerName = name;
        playerColor = color;
    }
}

지원되는 타입

RPC에서 지원되는 타입은 다음과 같습니다:

  • 기본 타입(Primitives): byte, short, int, long, ushort, uint, ulong, float, double, bool
  • 유니티 타입: Vector2, Vector3, Vector4, Quaternion, Vector2Int, Vector3Int, Rect, RectInt Color, Color32
  • Fusion 타입: NetworkObject, NetworkBehaviour, NetworkString<>, NetworkBool, Angle, NetworkId, PlayerRef, SceneRef, TickTimer
  • Strings
  • 구조체 INetworkStruct 구현
  • 배열 지원 타입. 예. Int[].

타겟팅 된 RPC

특정 플레이어의 기계에서만 실행되도록 RPC를 설정하려면 타겟팅 된 RPC를 사용합니다. 인스턴스 RPC와 정적 RPC 모두 PlayerRef 매개변수를 추가하고 [RpcTarget] 속성을 사용하여 타겟팅 된 RPC로 전환할 수 있습니다. 일반적인 사용 사례는 팀 채팅으로, 메시지가 자신의 팀원에게만 전달되는 경우입니다.

C#

[Rpc(sources: RpcSources.InputAuthority, targets: RpcTargets.All)]
public void Rpc_TargetedInstanceMessage([RpcTarget] PlayerRef player, string message){}

또는

C#

[Rpc(sources: RpcSources.InputAuthority, targets: RpcTargets.All)]
public static void Rpc_MyTargetedStaticMessage(NetworkRunner runner, [RpcTarget] PlayerRef player, string message) { };
중요

메서드 내에서 사용하는 [RpcTarget] 속성은 메서드 선언 앞에 있는 [Rpc] 속성의 RpcTargets 매개변수와는 다릅니다.

Back to top