본문으로 건너뛰기

사용자정의 network RPC

Texture stream을 통해 event를 보내야 한다면 TSMP RPC를 사용합니다. Delayed interaction, toggle, trigger, one-shot state transition에 적합합니다.

TSMP RPC는 method call을 자동 주입하지 않습니다. TSMPNetworkBehaviour에서 SendTransRPC(methodName, target)을 호출하세요.

Minimal RPC component​

using K13A.TSMP.Udon;
using UnityEngine;

public class BellSync : TSMPNetworkBehaviour
{
public AudioSource bell;

public override void Interact()
{
SendTransRPC(nameof(Ring), RPCTarget.All);
}

public void Ring()
{
if (bell != null)
{
bell.Play();
}
}
}

SendTransRPC()​

public void SendTransRPC(string methodName, RPCTarget target)
Parameter의미
methodNameTarget behaviour에서 실행할 public method name. 가능하면 nameof(Method)를 사용하세요.
targetLocal, Remote, All.

RPCTarget​

TargetSender behaviourReceiver behaviour
LocalMethod를 즉시 실행합니다.Queue하지 않습니다.
RemoteLocal에서는 실행하지 않습니다.Decoded receivers에 queue합니다.
All즉시 실행합니다.Decoded receivers에도 queue합니다.

Sender와 receiver를 OBS 같은 capture path로 loopback하면 All은 즉시 한 번, capture delay 뒤에 한 번 더 실행될 수 있습니다.

Reliability and repeat frames​

RPC는 encoder의 transRpcRepeatFrames 동안 frame에 노출됩니다. 다음 경우 값을 늘리세요.

  • Capture path가 frame을 drop함.
  • OBS나 Spout frame pacing이 불규칙함.
  • Interaction이 씹힘.

빠르게 반복되는 event에는 너무 높은 repeat count를 쓰지 마세요. Receiver가 같은 event를 예상보다 오래 볼 수 있습니다.

Method restrictions​

  • Receiving TSMPNetworkBehaviour에 method가 있어야 합니다.
  • Udon-safe path에서는 public, argument-free method를 권장합니다.
  • Event에 data가 필요하면 [TransSync] field로 보내세요.
  • Repeat frames 가능성을 고려해 side effect는 가능하면 idempotent하게 만드세요.

Debug checklist​

SymptomCheck
Local action works but delayed action does notEncoder queuedRpcCount, rpcMessageCount, decoder lastRpcCallCount.
Event is missedtransRpcRepeatFrames를 늘리고 debug canvas에서 frame loss 확인.
Wrong object receives eventApply Setup 실행 후 networkId uniqueness 확인.