에셋들만 짜집기해서 월드 만들려면 알 필요 없는 내용인데 직접 코드싸서 월드개발을 하려면 무조건적으로 알아야 되는 내용임
월드 개발과 디버깅의 80%는 이 네트워킹때문에 똥꼬쇼를 하게된다
네트워킹에 기본적으로 깔고 들어가야될 마인드는 "모든 클라이언트는 로컬이고 특정 유저 (특히 월드 마스터)가 지속적으로 월드 상태를 동기화 해줘야 된다"임
즉 각각의 유저마다 각자의 씬을 가지고 있고 게임오브젝트나 변수들에 대한 정보 업데이트를 지속적으로 받으면서 마치 다같이 함께 움직이게 만드는 눈속임이라고 생각하면됨
이 마인드가 굉장히 중요한데 네트워킹을 고려 안하고 짰다가 의도치 않은 결과가 나오는 경우가 매우 많음
제대로 동기화가 안돼서 로컬로만 돌아가거나 중간에 동기화 받지 못한 변수때문에 런타임 예외로 스크립트 자체가 멈춰버리거나 (우동샵은 예외처리 안돼서 개빡침)
그래서 프로젝트 계획 단계부터 항상 네트워킹을 생각해야 똥꼬쇼를 줄일 수 있음

동기화 방식에는 3가지가 있는데 None은 말그대로 동기화 없이 전부 로컬인거고
Continuous는 짧은 간격마다 자동으로 업데이트를 쏴줌
간단한 스크립트면 쓰기엔 좋은데 예상한대로 작동이 안되는 경우가 종종 있음 (특히 핑차이 때문에)
Manual은 말그대로 동기화를 직접 실행하는 방식이고 디버깅 하다보면 결국 전부 관리할 수 있는 이쪽으로 넘어오는게 맘편함
우동샵에서 쓰는 동기화 요소들은 여러가지가 있는데 많이 쓰게되는건 [UdonSynced] 어트리뷰트, RequestSerialization, OnDeserialization, SendCustomNetworkEvent, OnPlayerJoined 등등을 자주 쓰게됨

[UdonSynced] 어트리뷰트는 변수가 로컬변수 (네트워크적으로)가 아니라 클라이언트 모두에게 동기화될 변수라고 컴파일러한테 알려주는거임
동기화 방식이 Continuous라면 일정 시간마다 알아서 동기화가 되고
Manual이면 마스터가 RequestSerialization()을 호출할 때 [UdonSynced] 변수들의 정보가 네트워크에 전파됨
모든 타입에 [UdonSynced]를 붙일 수 있는건 아니고 https://udonsharp.docs.vrchat.com/vrchat-api#synced-variables 여기에 있는 애들만 가능함

RequestSerialization()은 [UdonSynced] 변수들을 동기화 시키고 싶을 때 호출하면 되고 모든 [UdonSynced] 변수들 전부 동기화가 이뤄짐
너무 자주 막쓰면 네트워크 오버헤드가 커지기 때문에 상황에 따라 적절하게 사용하면됨

OnDeserialization()은 RequestSerialization()의 콜백함수고 [UdonSynced] 변수값이 동기화를 통해서 바뀔때 자동으로 호출됨
UdonSharpBehaviour클래스 내에 있는 OnDeserialization()을 자기 입맛에 맞게 오버라이드 해서 사용하면 됨

SendCustomNetworkEvent는 다른 클라이언트한테 특정 함수를 호출하게 할 수 있음
인자가 2개인데 NetworkEventTarget는

이렇게 2가지고 뒤에 붙는 string은 호출하게 하고싶은 함수 이름을 넣으면 됨
마스터만 사용하는게 오버헤드도 줄이고 디버깅도 쉬워져서 쓰기 전에 클라이언트 마스터 검사를 하는게 좋음
그리고 전달하는 인자가 사실상 함수이름 1개밖에 없기 때문에 호출하려는 함수가 추가적으로 인자를 받는 함수면 인터폴레이션하고 함수를 여러개 만드는 등의 개똥꼬쇼 하게되는 원인이기도함

OnPlayerJoined는 뒤늦게 조인한 다른 플레이어를 다룰 때 좋음 이것도 오버라이드해서 쓰면됨
다른 플레이어가 월드에 조인할때마다 인스턴스에 있는 모든 클라이언트에서 자동으로 호출되고
VRCPlayerApi player는 조인한 플레이어를 가리킴
조인한 플레이어 본인한테만 따로 특별하게 구현하고싶은 로직이 있으면 player.isLocal 플래그를 확인해서 구현하면 됨
이 외에도 다른 함수들도 많은데 자주 쓰지는 않음 걔네들은 우동샵 공식 문서를 참고하세요
그리고 중요한 얘기로 VRCObjectSync와 Ownership에 관한 얘기가 있는데 이건 수요있으면 다음에 써봄