VRChat 마이너 갤러리 저장소

제 목
강좌/팁 UdonSharp 네트워킹 개요
글쓴이
미찌
추천
11
댓글
5
원본 글 주소
https://gall.dcinside.com/vr/3391658
  • 2023-10-12 04:01:22
							

에셋들만 짜집기해서 월드 만들려면 알 필요 없는 내용인데 직접 코드싸서 월드개발을 하려면 무조건적으로 알아야 되는 내용임


월드 개발과 디버깅의 80%는 이 네트워킹때문에 똥꼬쇼를 하게된다


네트워킹에 기본적으로 깔고 들어가야될 마인드는 "모든 클라이언트는 로컬이고 특정 유저 (특히 월드 마스터)가 지속적으로 월드 상태를 동기화 해줘야 된다"임


즉 각각의 유저마다 각자의 씬을 가지고 있고 게임오브젝트나 변수들에 대한 정보 업데이트를 지속적으로 받으면서 마치 다같이 함께 움직이게 만드는 눈속임이라고 생각하면됨


이 마인드가 굉장히 중요한데 네트워킹을 고려 안하고 짰다가 의도치 않은 결과가 나오는 경우가 매우 많음


제대로 동기화가 안돼서 로컬로만 돌아가거나 중간에 동기화 받지 못한 변수때문에 런타임 예외로 스크립트 자체가 멈춰버리거나 (우동샵은 예외처리 안돼서 개빡침)


그래서 프로젝트 계획 단계부터 항상 네트워킹을 생각해야 똥꼬쇼를 줄일 수 있음


24b0d121e09c28a8699fe8b115ef046c68f02e49


동기화 방식에는 3가지가 있는데 None은 말그대로 동기화 없이 전부 로컬인거고


Continuous는 짧은 간격마다 자동으로 업데이트를 쏴줌 


간단한 스크립트면 쓰기엔 좋은데 예상한대로 작동이 안되는 경우가 종종 있음 (특히 핑차이 때문에) 


Manual은 말그대로 동기화를 직접 실행하는 방식이고 디버깅 하다보면 결국 전부 관리할 수 있는 이쪽으로 넘어오는게 맘편함


우동샵에서 쓰는 동기화 요소들은 여러가지가 있는데 많이 쓰게되는건 [UdonSynced] 어트리뷰트, RequestSerialization, OnDeserialization, SendCustomNetworkEvent, OnPlayerJoined 등등을 자주 쓰게됨


24b0d121e09c28a8699fe8b115ef046f574e90


[UdonSynced] 어트리뷰트는 변수가 로컬변수 (네트워크적으로)가 아니라 클라이언트 모두에게 동기화될 변수라고 컴파일러한테 알려주는거임


동기화 방식이 Continuous라면 일정 시간마다 알아서 동기화가 되고


Manual이면 마스터가 RequestSerialization()을 호출할 때 [UdonSynced] 변수들의 정보가 네트워크에 전파됨


모든 타입에 [UdonSynced]를 붙일 수 있는건 아니고 https://udonsharp.docs.vrchat.com/vrchat-api#synced-variables 여기에 있는 애들만 가능함 


24b0d121e09c28a8699fe8b115ef046eca40cc


RequestSerialization()은 [UdonSynced] 변수들을 동기화 시키고 싶을 때 호출하면 되고 모든 [UdonSynced] 변수들 전부 동기화가 이뤄짐


너무 자주 막쓰면 네트워크 오버헤드가 커지기 때문에 상황에 따라 적절하게 사용하면됨


24b0d121e09c28a8699fe8b115ef04699d39f5

OnDeserialization()은 RequestSerialization()의 콜백함수고 [UdonSynced] 변수값이 동기화를 통해서 바뀔때 자동으로 호출됨


UdonSharpBehaviour클래스 내에 있는 OnDeserialization()을 자기 입맛에 맞게 오버라이드 해서 사용하면 됨


24b0d121e09c28a8699fe8b115ef046c62f32b4f


SendCustomNetworkEvent는 다른 클라이언트한테 특정 함수를 호출하게 할 수 있음


인자가 2개인데 NetworkEventTarget는

24b0d121e09c28a8699fe8b115ef046c62f92a47

이렇게 2가지고 뒤에 붙는 string은 호출하게 하고싶은 함수 이름을 넣으면 됨


마스터만 사용하는게 오버헤드도 줄이고 디버깅도 쉬워져서 쓰기 전에 클라이언트 마스터 검사를 하는게 좋음


그리고 전달하는 인자가 사실상 함수이름 1개밖에 없기 때문에 호출하려는 함수가 추가적으로 인자를 받는 함수면 인터폴레이션하고 함수를 여러개 만드는 등의 개똥꼬쇼 하게되는 원인이기도함


24b0d121e09c28a8699fe8b115ef046c69f52b47

OnPlayerJoined는 뒤늦게 조인한 다른 플레이어를 다룰 때 좋음 이것도 오버라이드해서 쓰면됨


다른 플레이어가 월드에 조인할때마다 인스턴스에 있는 모든 클라이언트에서 자동으로 호출되고


VRCPlayerApi player는 조인한 플레이어를 가리킴


조인한 플레이어 본인한테만 따로 특별하게 구현하고싶은 로직이 있으면 player.isLocal 플래그를 확인해서 구현하면 됨


이 외에도 다른 함수들도 많은데 자주 쓰지는 않음 걔네들은 우동샵 공식 문서를 참고하세요


그리고 중요한 얘기로 VRCObjectSync와 Ownership에 관한 얘기가 있는데 이건 수요있으면 다음에 써봄





무무에용 교수님 진도가 너무 빨라요 - dc App 2023.10.12 04:06:26
조개껍데기 인수 있는 함수 네트워크 전달 하는건 도대체 언제 추가해주지 2023.10.12 04:07:47
행복해꿀벌 코드 찍 2023.10.12 04:07:47
ㅇㅇ 평소처럼 으에에 거리기나 하지 안어울리게 뭐하노 223.38 2023.10.12 04:08:18
ㅇㅇ(142.149) 왤케똑똑함 2023.10.12 04:16:45
번호 분류 제목 글쓴이 날짜 추천
3602203 강좌/팁 피해야 하는 쓰레기 알려준다 7 ㅇㅇ 27.35 2024-01-06 9
3601377 일반 표정 왜 이래;;;; 11 ᅠᅠᅠ 2024-01-06 12
3601210 일반 세이렌 공룡술사 콤보 지겹노ㅉㅉ 8 ㅇㅇ 118.235 2024-01-06 10
3599909 일반 실친들이 나 브챗하는거 알게됐다,, 11 안하무인 2024-01-05 11
3599249 일반 댓글창으로 그냥 섹스를 해라 15 ㅇㅇ 211.36 2024-01-05 12
3597460 일반 이런건 게이차단 안걸리노 21 ㅇㅇ 1.235 2024-01-04 19
3596717 일반 브챗 할거없다는 애들 특징 27 ㅇㅇ 2024-01-04 11
3596219 일반 브붕이섹스중 11 ㅇㅇ 27.117 2024-01-03 11
3595490 일반 쓰다듬 번개 이거 맞음? 15 어저라고맞장깔까 2024-01-03 22
3595099 일반 ㅈ같은 게이목소리 내지마셈 5 ㅇㅇ 211.50 2024-01-03 10
3593147 일반 근데 브챗 대부분 여자1+남자3 국룰이던데 12 ㅇㅇ 58.126 2024-01-02 12
3592394 일반 누구보다 정치떡밥돌리지만 안돌리는척 이악물고 모른척 4 wall2008 2024-01-02 12
3592336 일반 노무현 10 오피녀 2024-01-02 17
3592193 일반 갤에 개추요정있네 1 ㅇㅔㄴ 2024-01-02 13
3591567 일반 브챗 뉴비 이제좀 알것같음 19 ㅇㅇ 125.181 2024-01-01 11
3588917 일반 30대 유저 <<솔직히 쌉호감 6 ㅇㅇ 222.118 2023-12-31 9
3588835 일반 "자기야. 내가 해돋이 보여줄까?" 6 ㅇㅇ 125.209 2023-12-31 12
3588500 일반 과몰입하는ㅅㄲ들이 싸웠다고 갤에서 소통하고있네 5 ㅇㅇ 117.111 2023-12-31 9
3588437 일반 vrchat을 많이하면 안되는 이유 9 플랫화이트 2023-12-31 11
3588427 일반 아무이유없이개추받으면 고로시인가 3 복실이 2023-12-31 10
3588389 일반 개추요정 무서움 7 koper 2023-12-31 18
3586416 정보 브갤 단어집 13 유동아님? 2023-12-30 9
3585931 일반 아뢰옵기 황송하오나 24 임세인 2023-12-30 9
3585815 일반 님도라 이거보셈 9 칸터 2023-12-29 16
3584424 ㅋㅋㅋ부모님께 이걸 들키는 병신이 어딨냐 31 괜찮아요 2023-12-29 9
3583986 일반 그새끼 ㅈ같지않냐?? 6 ㅇㅇ 2023-12-29 14
3582007 일반 친구가 내짤로 ㅈ같은거 만들어옴 38 쌩쥐 2023-12-28 9
3580865 일반 이거념글티켓아님? 39 이세상게임이아냐 2023-12-27 13
3580852 강좌/팁 풀트 암캐들을 위한 노상방뇨 팁(호라이즌 기능) 23 ㅇㅇ 218.148 2023-12-27 16
3578481 일반 브챗글도 거의 안쓰면서 5 도라지 2023-12-26 11
3577948 일반 내 호감형으로 변해라! 얍! 9 ㅇㅇ 112.172 2023-12-26 11
3577463 일반 갤 이름 VRChat이 아니라 5 ㅇㅇ 49.246 2023-12-26 9
3577048 일반 뉴비때 따먹혔다는 거 좀 신기함 15 기타 2023-12-26 10
3576621 일반 오늘은 나의 날 36 레뺘앗 2023-12-25 15
3575958 일반 나시발 브챗 잘못시작함 37 ㅇㅇ 106.101 2023-12-25 9
3575430 일반 솔직히 과몰입은 게이 아니라고 생각하는게 7 koper 2023-12-25 11
3575418 일반 크리스마스 기념 왔다 12 엞엞 2023-12-25 12
3573808 일반 아 아기 오늘 오늘 생ㅇ리래요.. 14 라즈베리스트로베리에델바이스마음속의꽃 2023-12-24 10
3572980 과몰입 임신시켰다... 6 Ganachocolate 2023-12-23 9
3572550 월드 잡지컨셉으로 월드 소개해보기 2023년 12월호.png 11 ㅇㅇ 49.161 2023-12-23 9
념글 삭제글 갤러리 랭킹