VRChat 마이너 갤러리 저장소

제 목
강좌/팁 Udonsharp 네트워킹 개요2
글쓴이
미찌
추천
11
댓글
5
원본 글 주소
https://gall.dcinside.com/vr/3425252
  • 2023-10-25 17:25:31
							

저번글 https://gall.dcinside.com/mgallery/board/view/?id=vr&no=3391658 에서는 월드 마스터를 중심으로 한 동기화변수와 전반적인 이벤트 트리거에 대해 다뤘다면


이번엔 오브젝트의 동기화에 대해 다룰 예정


저번글에서도 썼듯이 유저 모두 각자의 씬을 가지고 있고 모든 게임 오브젝트는 기본적으로 로컬이며 동기화 시키기 위해선 끊임없이 정보를 주고받게 만들어야됨


브챗에선 오브젝트들의 동기화를 위해 VRC Object Sync라는 스크립트를 제공해서 제작자가 오브젝트 동기화를 직접 구현할 필요가 없게 만들어놨음


24b0d121e09c28a8699fe8b115ef046a746aeb

 

글로벌로 만들고 싶은 오브젝트에 이 스크립트를 추가해주면 알아서 동기화 시켜줌


얘가 맘에 안들어서 동기화를 직접 구현한 스크립트들도 있지만 아주 특별한 상황이 아니라면 얘로도 충분함


Udonsharp에선 VRC.SDK3.Components.VRCObjectSync 클래스로 사용가능하고 메소드가 5개가 있는데 사실상 써먹는건 FlagDiscontinuity()랑 Respawn() 이렇게 2가지임


Respawn()은 오브젝트를 초기 위치 상태로 돌려놓는 메소드임 


월드에서 자주 보이는 리스폰 버튼 누르면 글로벌 오브젝트들이 싹 정리되는데 이걸 이용한것 


FlagDiscontinuity()는 오브젝트를 순간이동 시키고 싶을때 사용함 이 함수를 호출하면 해당 프레임에서 일어난 오브젝트 이동은 smoothing하는 과정 없이 말그대로 순간이동처럼 보임


사실 TeleportTo()라는 메소드가 따로 있는데 기억상 구데기라서 밑에처럼 따로 라이브러리 만들어서 쓰고있음


24b0d121e09c28a8699fe8b115ef0469913ff2b4


대충 Rigidbody 물리량들을 초기화하고 위치 옮긴 뒤에 FlagDiscontinuity()를 트리거하는 식


몸통 젤 첫줄에 보면 오브젝트의 오너를 설정해주는 부분이 있는데 사실 VRCObjectSync를 통한 동기화는 오브젝트의 오너를 중심으로 이뤄짐


저번 글의 월드 마스터 중심으로 이뤄지던 변수나 이벤트 동기화랑 다른 부분이라 알아두고 있어야됨


오너쉽 이동은 플레이어가 물체를 잡았을때 자동으로 해당 오브젝트의 오너가 되고 직접 제어하고 싶다면 저렇게 Networking.SetOwner()로 요청할 수도 있음


이벤트 등을 통해 직접 오브젝트를 움직이고 싶다면 월드 마스터에 오너를 넘긴뒤에 하는게 디버깅에도 간편하고 좋음


오우나쉽 이동에 관한건 이렇게 한짤 요약이 돼있으니 참조

24b0d121e09c28a8699fe8b115ef0469933df2b9


마지막으로 VRCObjectSync는 Transform이랑 Rigidbody는 동기화 시켜주지만 해당 오브젝트의 active상태는 동기화요소가 아니라는걸 알아둬야됨


그래서 오브젝트의 글로벌 온오프는 따로 이벤트로 구현하거나 VRC.SDK3.Components.VRCObjectPool를 사용할 수도 있음


VRCObjectPool은 많은 수의 글로벌 오브젝트를 관리할 때 편함 얘의 장점은 pool에 들어있는 오브젝트들의 활성화 상태를 자동으로 동기화 시켜준다는 점임


뒤늦게 조인한 플레이어를 위해 따로 온오프 상태 업데이트 구현을 안해줘도 된다는것


24b0d121e09c28a8699fe8b115ef046c60f9214c


클래스 프로퍼티인 GameObject[] Pool로 각각 오브젝트들에 접근할 수있고


VRCObjectPool에 할당된 오브젝트들은 런타임시에 전부 비활성 상태로 로드됨


오브젝는 TryToSpawn()을 통해 활성화, Return()을 통해 비활성화 할 수 있고 얘네를 써야만 제대로 활성화 상태가 동기화됨


근데 참으로 찐빠스럽게도 TryToSpawn()에는 오브젝트 인수를 넘길 수 없고 Pool 인덱스 순서대로 활성화됨 (좆병신같음)


웃긴건 Return()에는 오브젝트를 넘겨줄 수 있다는 점임 (개좆병신임?)


암튼 그래서 원하는 오브젝트만 활성화 시키려면 Pool루프를 돌리면서 TryToSpawn()으로 전부 활성화 시키고 원하지 않는건 Return()해서 원하는거만 남겨두는 병신같은 똥꼬쇼를 해야됨


24b0d121e09c28a8699fe8b115ef046c66f9284b

그래서 그냥 게임오브젝트 기본 SetActive()를 사용하고 동기화는 이벤트로 따로 구현하는게 편할때도 있으니 취향대로 하면됨


보너스로 VRCObjectPool엔 Shuffle()이라는 메소드도 있는데 말그대로 Pool을 섞어줌 TryToSpawn()호출 전에 Shuffle()하면 카드 랜덤 뽑기 같은걸 구현할 수 있음


24b0d121e09c28a8699fe8b115ef046c63f2214d


인겜에서 오브젝트 동기화 현황은 6번 디버깅 창으로 볼 수 있고


24b0d121e09c28a8699fe8b115ef0464d68ee4ca


이렇게 오너가 누군지 깨있는지 잠들어있는지 (잠들어있는 상태면 동기화를 멈춤) 오너랑 다른 플레이어들 사이의 딜레이가 얼마나 되는지 보내는 바이트 사이즈랑 초당 얼마나 보내는지 마지막으로 동기화 되고 얼마나 지났는지 동기화 빈도등을 hz단위로 볼 수 있음



24b0d121e09c28a8699fe8b115ef046c66f9294d9bed

8번 메뉴로는 이렇게 각각 오브젝트 별로도 볼 수 있으니 참조


오브젝트 동기화에 대한건 이걸로 거의 다 쓴듯

나쵸 어..이게..머농.... 2023.10.25 17:25:51
ㅇㅇ1 개추 121.160 2023.10.25 17:27:51
ㅇㅇ 뭔 개소리여 223.38 2023.10.25 17:30:03
조개껍데기 2023.10.25 17:33:10
ㅇㅇ 이게 나랑 같은겜 하는거 맞냐 172.224 2023.10.25 17:35:36
번호 분류 제목 글쓴이 날짜 추천
3619193 일반 번개/교류회 개최 가이드라인 18 조개껍데기 2024-01-13 17
3618828 일반 리퍼충 다시 박제함 8 김주발 2024-01-13 9
3618792 일반 리퍼충 박제 13 김주발 2024-01-13 9
3618499 일반 무슨일이 있었냐면서 나타날 파딱들 괘씸하면 ㅇㅇ 106.101 2024-01-13 12
3618446 일반 완장달고 네임드작만 할 줄 앎ㅋㅋ 1 ㅇㅇ 106.101 2024-01-13 12
3617604 일반 치트키 "해줘" 9 욜로 2024-01-12 12
3616803 일반 난 그냥 사람이 아니다 이제 20 천부의폭군 2024-01-12 13
3616784 일반 근데 주딱 좀 쉬울거같지않음?? 14 ㅇㅇ 218.148 2024-01-12 16
3616516 일반 요즘 완장들 암캐나 똥게이같음 3 ㅇㅇ 223.38 2024-01-12 9
3616130 일반 핵쟁이 한명 고로시함 19 ㅇㅇ 115.161 2024-01-12 14
3615890 일반 주황불 ㅇㅈㄹ ㅋㅋㅋㅋㅋ 21 ㅇㅇ 2024-01-12 11
3615851 이벤트 그냥 갤이 불타는걸 보고싶은거네 22 오피녀 2024-01-12 9
3615703 일반 저능아 사고방식은 우리랑 아예 다름 4 ㅇㅇ 221.165 2024-01-12 14
3614891 생각난김에 규칙관해서 소신발언 (아침에 읽으세요~) 16 ㅇㅇ 2024-01-11 24
3614679 일반 번개 프플로 여는 거 이제부터 금지하겠습니다 19 눈바로 2024-01-11 20
3614551 일반 음교회진짜팩트알려줌ㅋㅋㅋㅋㅋㅋ 7 ㅇㅇ 2024-01-11 21
3614504 일반 음교회좆목어쩌고하는새끼들거의좆찐따새끼들임 8 ㅇㅇ 106.102 2024-01-11 13
3614449 일반 번개내 2차 금지 25 조개껍데기 2024-01-11 17
3614430 음교회 소신발언~ 2 ㅇㅇ 2024-01-11 15
3614394 일반 고닉 갈색단풍잎은 앞으로 음교회 열지 않았으면 좋겠음 17 꿀꿀떡 2024-01-11 19
3613547 일반 이게 갤 좆목이지 ㄹㅇㅋㅋ 14 ㅇㅇ 2024-01-11 11
3613438 일반 여긴 병신같은 글도 다 념글가네 ㅋㅋ 9 람지썬더 2024-01-11 10
3613274 일반 ___________"무량공처(無量空處)"____________ 4 ㅇㅇ 2024-01-11 12
3612488 이벤트 [기본카메라] 그리운 날들.jpg 8 아니그러니까 2024-01-10 15
3612456 일반 뿔난유동 정리 34 새이렌 2024-01-10 10
3612180 일반 어제 짐볼 도발에 걸려서 결국....♡ 12 ㅇㅇ 112.172 2024-01-10 13
3612068 일반 저 새끼는 왜자꾸 과몰입 있는거 티내지?? 6 ㅇㅇ 211.36 2024-01-10 10
3611724 일반 남자보고 행동하는거 보고 귀엽다고 하면 31 꽃과봄 2024-01-10 10
3610380 이벤트 [기본카메라] 월드 소개 및 바닥깔기용 참가 13 꽃과봄 2024-01-09 11
3610274 이벤트 [~1/31] "기본카메라" 사진 대회 이벤트! 22 사진 2024-01-09 29
3609925 일반 병신.jpg 6 키쿄 2024-01-09 11
3609907 일반 하시발 25 오피녀 2024-01-09 9
3609270 일반 도와주세요 팬티가 얼굴쪽으로 계속 올라가는데 이거 머가 문제인가요 ㅠ 22 초코냥 2024-01-09 11
3607731 일반 아는사람만 보이는 짤 만들어옴 17 ㅇㅇ 112.172 2024-01-08 12
3607403 일반 여기갤은 일하는 관리자 둘뿐임 4 ㅇㅇ 1.243 2024-01-08 10
3607305 일반 과몰입 안해본 클린 브붕이면 개추 ㅋㅋ 8 매장 2024-01-08 18
3607202 일반 현 파딱들, 자주 보이는 고닉 상당수가 게이인거 이미 다 안다 2 ㅇㅇ 118.235 2024-01-08 13
3607104 일반 그럼 시발 X에서 게이 과몰입하고 있는 애들 싹다 영차인거냐? 15 ㅇㅇ 118.235 2024-01-08 10
3606886 일반 와.... 10 ㅇㅇ 2024-01-08 14
3606789 일반 뇌가 좆에달린 게살버거비법, 리엘님 27 ㅇㅇ 2024-01-08 21
념글 삭제글 갤러리 랭킹