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] 속성으로 선언된 함수이다.
- 일시적으로 변화하는 상태를 공유하기에 적합하다.
void나 RpcInvokeInfo를 반환하도록 선언한다.
- 접두사/접미사로 "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 함수 허용 매개변수 타입
- Fusion은 매 Tick마다 수집한 플레이어의 입력을 서버로 복제한다.
감사합니다.