오브젝트 움직이기
NetworkTransform 은 위치·회전·스케일을 복제하고, 오브젝트가 멈춰 있는 동안에는 아무것도 보내지 않습니다.
오브젝트에 NetworkTransform 을 넣고 움직이면 됩니다. 소유한 클라이언트가 보내고 나머지가 재생하며, 멈춰 있는 오브젝트는 아무것도 쓰지 않습니다.
연속 동기화를 쓰지 않는 이유
Udon 의 연속 동기화는 움직이든 말든 일정 간격으로 복제하고, 아무도 고르지 않은 곡선으로 부드럽게 만듭니다. NetworkTransform 은 임계값을 넘겨 실제로 바뀐 채널만 보내고 보간도 직접 합니다. 그래서 서 있는 오브젝트는 패킷 대신 프레임마다 비교 한 번입니다.
설정
SyncPosition, SyncRotation, SyncScale |
어떤 채널을 보낼지 |
SendRate |
움직이는 동안 초당 전송 횟수 |
MinPositionChange, MinRotationChange, MinScaleChange |
보낼 만한 변화량 |
ResendInterval |
놓친 갱신을 메우는 하트비트 |
TeleportDistance |
이보다 큰 이동은 보간하지 않고 순간이동으로 재생 |
LastSentBytes 와 DroppedSends 는 실행 중에 읽을 수 있어, 움직이는 오브젝트가 실제로 얼마나 쓰는지 알고 싶을 때 보면 됩니다.
픽업과 함께
같은 오브젝트에 VRC_Pickup 이 있으면 집는 사람이 소유권을 가져가므로, 들고 있는 사람이 보내는 쪽이 됩니다. 놓으면 멈춘 자세가 전송됩니다. 따로 연결할 것은 없습니다.
어떻게 보이는지
재생은 한 전송만큼 뒤처집니다. 도착한 스냅숏은 그 앞의 것부터, 둘이 도착한 간격에 걸쳐 재생됩니다. 초당 열 번 튀는 목표로 다가가며 생기는 "튀었다 감속" 대신 등속 구간이 됩니다. 대가는 네트워크 자체 지연에 더해 한 전송 간격만큼의 지연입니다.
건드리지 않은 오브젝트는 패킷 하나 없이도 늦게 들어온 사람에게 제대로 보입니다. 위치는 씬이 이미 들고 있기 때문입니다. 스냅숏을 한 번도 받지 못한 클라이언트는 직렬화된 그대로 둡니다.
쓰는 쪽은 소유자뿐입니다. 소유한 클라이언트는 자기 움직임을 보간하지 않으므로, 손에 들고 있는 것은 재생된 복사본이 아니라 자기 움직임 그대로입니다.