1편 : Udon 강좌 - 1 온오프 물체 만들기 https://gall.dcinside.com/m/vr/337377
위에서 강좌를 보고 왔다면, 변수를 이용하여 거울을 온 오프 하는 방법을 알았을 것이다. 안봤다면 꼭 보자. 이해 못할 수도 있다.
위의 강좌는 버튼을 누르면 자신만 거울이 꺼졌다 켜진다.
그렇다면 모두에게 보이게 하거나, 방장만 누를 수 있는 버튼을 만드는 방법을 알아보자.
해당 노드는 전에 쓴 강좌에서 만든 노드를 조금 수정한 것이다.
차이점이라면 Set Active함수를 Interact와 연결하지 않았고, Late Update 함수와 연결한 것이다.
Late Update는 실시간으로 실행하게 하는 이벤트이다. (단 Update보다는 느리게 실행한다.)
Late Update인 이유 ) 위에서 Set Variable로 switch변수를 바꿨다. 근데 만약 Late Update가 아니라 Update일 경우 순서가 바뀌어서 실행 될 수 있기 때문에 정확성을 위해 Late Update로 하는 것이다.
동작은 동일하다. 하지만 이번에 배울 변수 동기화를 위해서는 위와 같이 짜는 게 좋다.
1. 방장만 누를 수 있는 버튼 만들기. ex)노래방의 노래 선택 버튼
해당 기능은 유니티 2018버전 이전에 VRCSDK2를 이용한 Local이라던가 Owner이라던가를 설정하는 것과 같다. (누구에게 이벤트를 동기화 할 것인가)
이는 BroadCast Type이라고 한다. https://gall.dcinside.com/m/vr/391795 Udon에서는 좀 다르게 구현해야한다.
이를 구현하는 방법에 대해 알아보자.
위에서 이미 짠 노드를 보면 Switch변수에 따라 거울이 꺼지고 켜지는 것을 확인할 수 있다.
Switch변수를 보면 synced라는 체크 박스가 있는데 이를 체크하게 되면 된다.
방장 버튼을 만드려면 그저 저것만 체크하면 끝이다.
정확한 원리) Synced를 체크하면 방장의 Switch변수를 다른 플레이어의 Switch변수와 네트워크를 통해 동기화 한다고 보면 된다.
만약 방장이 아닌 플레이어가 누를 경우 자신 고유의 Switch변수는 변경되지만 방장이 아니므로 Switch변수는 다른 사람과 공유 되지 않는다.
공유 되지 않았으면, 주기적으로 방장의 Switch변수로 덮어 씌워지기 때문에 방장외에는 눌러도 반응이 없는 것으로 보이는 것이다.
만약 방장이라면 자신 고유의 Switch변수가 변경되고, 다른 플레이어게 자신의 Switch변수 값을 공유하므로 방장만 누를 수 있는 것처럼 보이는 것이다.
2.모두에게 공유 되는 변수 만들기.
위의 노드에서 단 두개, Networking Get Local Player와 Networking Set Owner을 추가 하였다.
이는 Add node에서 VRCSDK3 - VRCSDKBaseNetworking쪽에서 찾을 수 있다. 아니면 검색하던가
원리는 버튼을 누르면 현재 로컬 플레이어를 방장으로 만드는 것이다. 방장이 되면 위에서 설명한 원리대로 모두에게 Switch변수가 공유 될 것이다.
다만 이 방법의 경우 되긴 되는데... 버튼을 두번 눌러야한다. 이는 Set Owner가 Set Varaible보다 늦게 완료되는 게 이유인 것으로 추정한다.
버그인지 의도된건진 모르겠는데 좀 더 나은 방법을 알아내면 후에 작성함.
끗