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
번호 분류 제목 글쓴이 날짜 추천
3441758 일반 교류하는 게임인데 연애하는 게임인줄 아는애들이 있네. 13 ㅇㅇ 14.52 2023-11-01 10
3440391 일반 추천왜박히는거인 10 실고밍 2023-11-01 11
3439753 일반 이 화본역 그리우면 개추 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ 7 ㅇㅇ 116.122 2023-10-31 12
3438848 일반 10월 VRChat 갤러리 갤창랭킹...png 23 ㅇㅇ 222.232 2023-10-31 10
3438839 이벤트 [할로윈대회] 50.2mb 빨간망토ㅎㄷ ㄷ 28 으애애 2023-10-31 9
3438691 일반 화본역(현실) 다녀와슴!!!! 23 존나나 2023-10-31 9
3436535 일반 조상님들이 말하는 주딱이 종신집권 해야하는 이유 15 천년여우비 2023-10-30 10
3436164 이벤트 [할로윈대회]유우령입니다 12 레테 2023-10-30 10
3436052 일반 님들 저 비추 100개만 찍어주세요 13 니디 2023-10-30 17
3435623 일반 개추 줘라 39 안테나 2023-10-30 19
3434876 사진/영상 화본역 욕하려고 사진 잔뜩 찍어왔음... 14 ㅇㅇ 2023-10-29 19
3434804 일반 부스에 과금하는 놈은 이해할 수 없다. 5 ㅇㅇ 119.196 2023-10-29 9
3433647 일반 [할로윈대회] 조금 저능아같은 유령 10 장세연 2023-10-29 9
3433020 일반 [할로윈 대회] 한 맺힌 마누카 귀신 21 무서운동물1 2023-10-29 11
3432694 이벤트 [할로윈대회] 가위박힌 도라지 7 미찌 2023-10-28 9
3432297 강좌/팁 가슴본에 중력에 의한 사실적 표현을 적용해보자 12 _JJ_ 2023-10-28 11
3431652 일반 사건당사자입니다. 죄송합니다. 15 ㅇㅇ 118.235 2023-10-28 17
3430519 일반 우와 찐따다 20 새이렌 2023-10-27 12
3429361 일반 MMD 돌려봄 4 ㅇㅇ 183.96 2023-10-27 15
3428084 병신 [뉴스] 유동피플, 계속되는 탄압에 지쳐 결국... 브갤 이대로 괜찮은가 17 ㅇㅇ 2023-10-26 15
3426911 일반 ㅋㅋㅋㅋㅅㅂ 올리버쌤영상에 노무현 등판 ㅋㅋ 11 해윰 2023-10-26 10
> 강좌/팁 Udonsharp 네트워킹 개요2 5 미찌 2023-10-25 11
3424406 일반 병신 18 포동포도 2023-10-25 14
3423324 일반 친구 없을것같은 애들 많긴 함 11 ㅇㅇ 106.130 2023-10-25 11
3423165 일반 속보) 진고 신작소식 트윗 20 전국말랑협회 2023-10-25 17
3422560 일반 브붕이들이랑 얘기하면 쉽게 질리는 이유 알아냄 15 ㅇㅇ 121.136 2023-10-25 9
3421868 일반 오늘 그날이래 11 릿카쨩 2023-10-24 15
3421638 일반 니들 다 게이짓하면서 게이차단은 왜함? 9 ㅇㅇ 223.62 2023-10-24 12
3421252 일반 안녕하세요 이거 진짜인가요 11 ㅇㅇ 118.235 2023-10-24 12
3421138 일반 싱갤에 고로시 올라왔노ㅋㅋ 18 Space 2023-10-24 10
3420758 일반 어우 시발 머리가 하얀색인데 왜 7 ㅇㅇ 222.101 2023-10-24 9
3420700 강좌/팁 VRCFT 페이셜트래킹 더 자연스럽게 캘리브레이션 하기 5 LP 2023-10-24 10
3420326 이벤트 할로윈사진대회 10월24일부터~11월2일까지 엽니다.. 38 으애애 2023-10-24 17
3419960 일반 오늘 그날이야 46 레인보우샤배트 2023-10-24 20
3419393 도와줘 ㅈㄴ병신같은건데 나도 해결법 모르겠음 18 ㅇㅇ 211.54 2023-10-23 10
3416683 사진/영상 블아 총쏘는 미유 만듬 11 KTurret 2023-10-22 10
3416028 일반 와 개못생겼어 6 유라기모모카 2023-10-22 11
3413441 도와줘 님들 급함 본 병신댐 제발도와주세요 10 ㅇㅇ 2023-10-20 10
3413299 일반 축하 한번만 해주라 35 달팽이 2023-10-20 16
3411652 일반 실사지향으로 만든 아바타들보면 6 ㅇㅇ 106.101 2023-10-20 9
념글 삭제글 갤러리 랭킹