본문 바로가기

UDON 강좌

UDON 싱크 구조 정리

 

이 글은 https://hatuxes.hatenablog.jp/entry/2020/04/05/013323 이곳의 내용을 한국어로 해석해서 이해하기 쉽게 정리해둔 글입니다.

 

3가지의 VRC의 동기화 솔루션

1. Udon Behaviour의 Ownership Transfer on Collision 동기화

2. 변수의 동기화
3. 함수처리 동기화 (흡사 RPC)

 

 

첫번째. Udon Behaviour - Ownership Transfer on Collision

Udon Behaviour가 있는 오브젝트에 접촉되는 플레이어가 그 스크립트의 Owner가 되어 오브젝트의 Transform을 다른 플레이어에게 동기화 시킨다.

예를 들어 플레이어가 5명이 있고 Udon Behaviour가 있는 하나의 공이 있을때

Player1이 공을 들어 옮기면 Player1이 나머지 Player2~5에게 위치를 보낸다.

이번엔 Player2가 공을 들어 옮기면 Player2가 나머지 Player1, 3~5에게 위치를 보낸다

 

 

 

두번째. 변수의 동기화 - UdonSynced

이 솔루션은 월드 전체와 나중에 들어온 사람에게도 동기화가 된다.

 

지원되는변수 목록

bool

char

byte

int

long

unsigned byte

unsigned int

unsigned long

float

double

short

unsigned short

string

Color

Color32

Quaternion

Vector2

Vector3

Vector4

 

U#에서는 선언한 변수의 맨 앞에 [UdonSynced] 속성을 달아줌으로서 변수 싱크를 사용할 수 있다.

 

[UdonSynced (UdonSyncMode)]

UdonSyncMode

 - UdonSyncMode.None - 단적 동기화

 - UdonSyncMode.Linear - 선형 보간 동기화

 - UdonSyncMode.Smooth - 매끄러운 보간 동기화

 - UdonSyncMode.NotSynced - 동기화 하지 않음

 

단, 이 변수 싱크를 선언한 변수는 오직 Owner만 값을 수정할 수 있기 때문에 변수값을 수정해야 할 경우에는 SetOwner()로 Owner를 지정 후 수정해야한다.

 

 

 

세번째. 함수처리 동기화 - RPC

 

앞으로 함수를 호출할 때 가장 중요한 요소가 될거라 생각한다.

함수처리 동기화는 SendCustomNetworkEvent로 Public함수를 발생시킨다.

 

SendCustomNetworkEvent(NetworkEventTarget target, String name)

NetworkEventTarget target

 - VRC.Udon.Common.Interfaces.NetworkEventTarget.All - 모든 플레이어에게 이벤트 발생

 - VRC.Udon.Common.Interfaces.NetworkEventTarget.Owner - Owner에게만 이벤트 발생

String name
 - "function" - 이벤트함수 이름

 

물론 Owner중심으로 발생되기 때문에 Owner를 지정해줘야 한다.

 

 

 

싱크에 관한 소스코드와 다른 다양한 Udon스크립트는 아래에서 받아볼수있다https://github.com/mtytheone/Introduce-USharp/releases