본문으로 건너뛰기

사용자정의 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 확인.