[Photon Server] 1-7. Fusion: Data Transfer

scarleter99·2024년 2월 27일

[Unity] Photon Server

목록 보기
6/6
post-thumbnail

Networked Properties

  • NetworkBehaviour 구현체에 [Networked] 속성으로 선언된 프로퍼티이다.
  • 값이 변하면 다른 모든 Peer에게 복제된다.
  • Spawned()가 실행되기 전에는 접근할 수 없다.
  • 지속적으로 변화하는 상태를 공유하기에 적합하다.
public class PlayerBehaviour : NetworkBehaviour
{
    [Networked] public float Health { get; set; }
  
    public override void FixedUpdateNetwork()
    {
        Health += Runner.DeltaTime * HealthRegen;
    }
}

허용 타입

Capacity

  • NetworkArray, NetworkDictionary, NetworkLinkedList, NetworkString, string의 크기를 제한한다.
public class MyNetworkBehaviour : NetworkBehaviour
{
  [Networked, Capacity(14)]
  string MyString { get; set; }

  [Networked, Capacity(8)]
  NetworkArray<byte> MyArray { get; }
}

Remote Procedure Calls (RPCs)

  • NetworkBehaviour 구현체에 [RPC] 속성으로 선언된 함수이다.
  • 일시적으로 변화하는 상태를 공유하기에 적합하다.
  • voidRpcInvokeInfo를 반환하도록 선언한다.
  • 접두사/접미사로 "Rpc"를 붙여야한다.

Instance RPC

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

Static RPC

  • RpcSources, RpcTargets 속성 매개변수를 무시한다.
  • 첫 매개변수를 NetworkRunner로 선언해야한다.
  • NetworkObject가 아니더라도 SimulationBehaviour 의 구현체라면 콜백을 받을 수 있다.
[Rpc]
public static void Rpc_MyStaticRpc(NetworkRunner runner, int a) { }

Targeted Rpc

  • 특정 플레이어만 수신하도록 한다.
  • [RpcTarget] 속성으로 PlayerRef를 매개변수로 선언한다.
[Rpc(sources: RpcSources.InputAuthority, targets: RpcTargets.All)]
public void Rpc_TargetedInstanceMessage([RpcTarget] PlayerRef player, string message){}

RPC 속성 매개변수

  • RpcSources.InputAuthority
    • InputAuthority를 가진 객체만 발신 가능하다.
  • RpcTargets.StateAuthority
    • StateAuthority를 가진 객체만 수신 가능하다.
  • RPC 함수에서 변하는 필드는 Networked Property로 선언하는 것을 권장한다.
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 함수 허용 매개변수 타입


Player Input

  • Fusion은 매 Tick마다 수집한 플레이어의 입력을 서버로 복제한다.

1개의 댓글

comment-user-thumbnail
2024년 7월 7일

감사합니다.

답글 달기