UI 동기화
이 애드온은 버튼, 드롭다운, 스크롤 뷰 등의 유니티 UI 컴포넌트를 동기화할 수 있는 클래스를 제공합니다.
모든 UI 요소를 포괄적으로 동기화하는 것을 목표로 하지는 않았습니다.
목표는 일부 UI 요소에 대한 구현 예시를 제공하여, 필요시 사용자가 직접 다른 컴포넌트에 쉽게 적용할 수 있도록 하는 것입니다.

구현 방법
UI를 동기화하려면 다음을 수행하세요:
- 동기화할 UI 요소(또는 여러 UI 요소의 상태 권한을 함께 관리해야 하는 경우 상위 오브젝트)에
NetworkObject
컴포넌트를 추가합니다. UI 상태 권한이 사용자 간에 전환될 수 있는 경우,Allow State Authority Override
옵션을 활성화하세요. - 해당 UI 컴포넌트에 맞는 동기화 스크립트를 추가합니다 (
UISync_Button
은 버튼,UISync_Slider
는 슬라이더 등).
컴포넌트
Button
UISync_Button
은 Button
컴포넌트를 동기화하는 데 사용됩니다.
로컬 사용자가 버튼과 상호작용할 때를 감지하기 위해 onClick
이벤트를 수신합니다.
로컬 사용자가 컴포넌트에 대한 상태 권한이 없고 프록시의 상호작용이 허용된 경우 (disableInteractionWhenNotStateAuthority == false
), 권한을 요청합니다.
로컬 사용자가 버튼에 대한 상태 권한을 가질 경우, 버튼이 눌릴 때마다 ButtonClickValue
네트워크 변수가 증가합니다.
따라서 원격 사용자(프록시)는 다음과 같이 동기화됩니다:
- 버튼 컴포넌트에 시각적 피드백이 표시됩니다.
onButtonTouched
이벤트가 발생합니다.
Toggle
UISync_Toggle
은 Toggle
컴포넌트를 동기화하는 데 사용됩니다.
로컬 사용자의 상호작용을 감지하기 위해 onValueChanged
이벤트를 수신합니다.
상태 권한이 없고 프록시의 상호작용이 허용된 경우 권한을 요청합니다.
상태 권한을 가진 로컬 사용자가 토글을 조작할 때마다 ToggleIsOn
네트워크 변수가 갱신됩니다.
따라서 원격 사용자(프록시)는 다음과 같이 동기화됩니다:
onToogleValueChanged
이벤트가 발생합니다.
Dropdown
UISync_Dropdown
은 Dropdown
컴포넌트를 동기화하는 데 사용됩니다.
로컬 사용자가 새로운 항목을 선택할 때 onValueChanged
이벤트를 수신합니다.
상태 권한이 없는 경우 권한을 요청합니다.
상태 권한을 가진 사용자가 새로운 항목을 선택하면 DropdownValue
네트워크 변수가 갱신됩니다.
따라서 원격 사용자(프록시)는 다음과 같이 동기화됩니다:
- 드롭다운에서 해당 항목이 선택됩니다.
onDropdownValueChanged
이벤트가 발생합니다.
Slider
UISync_Slider
는 Slider
컴포넌트를 동기화하는 데 사용됩니다.
로컬 사용자의 상호작용을 감지하기 위해 onValueChanged
이벤트를 수신합니다.
상태 권한이 없는 경우 권한을 요청합니다.
상태 권한을 가진 사용자가 슬라이더 값을 변경할 때마다 SliderValue
네트워크 변수가 갱신됩니다.
따라서 원격 사용자(프록시)는 다음과 같이 동기화됩니다:
- 슬라이더 값이 갱신됩니다.
onSliderValueChanged
이벤트가 발생합니다.
ScrollRect
UISync_ScrollRect
는 ScrollRect
컴포넌트를 동기화하는 데 사용됩니다.
로컬 사용자의 스크롤 조작을 감지하기 위해 onValueChanged
이벤트를 수신합니다.
상태 권한이 없는 경우 권한을 요청합니다.
상태 권한을 가진 사용자가 스크롤 할 때마다 ScrollRectPosition
네트워크 변수가 갱신됩니다.
따라서 원격 사용자(프록시)는 다음과 같이 동기화됩니다:
- 스크롤 위치가 갱신됩니다.
onScrollRectValueChanged
이벤트가 발생합니다.
CanvasGroup
UISync_CanvasGroup
은 상태 권한에 따라 CanvasGroup
의 상호작용 가능 여부를 설정하는 데 사용됩니다:
- 사용자가 상태 권한을 가질 경우, 해당
CanvasGroup
은 자동으로 상호작용 가능하게 설정됩니다. - 상태 권한이 없을 경우, 자동으로 상호작용 불가능하게 설정됩니다.
캔버스 그룹의 상태를 변경하고 동기화함으로써 UI의 모든 상호작용 가능한 컴포넌트를 한 번에 비활성화할 수 있습니다.
또한 상태 권한에 따라 CanvasGroup
의 투명도(alphaAppliedOnCanvasGroupForStateAuthority
, alphaAppliedOnCanvasGroupForProxies
파라미터)를 다르게 설정할 수도 있습니다.
데모

두 개의 데모 씬은 Assets\Photon\FusionAddons\UISynchronization\Demo\Scenes\
폴더에서 찾을 수 있습니다.
두 씬은 UI 구성은 동일하지만, 상호작용 시스템이 다릅니다:
- FusionUISync : XRShared 상호작용 시스템 사용
- FusionUISync_XRIT : Unity XR Interaction Toolkit 사용
데모 씬에서는 다중 사용자 환경에서 다양한 UI 구현을 보여줍니다:
- 모든 사용자가 동시에 UI와 상호작용할 수 있습니다. 이 경우, UI 오브젝트의 상태 권한은 상호작용한 사용자에게 전환됩니다.
- 상태 권한을 가진 사용자만 UI와 상호작용할 수 있습니다. 프록시는 권한을 요청하기 전까지는 UI를 사용할 수 없습니다. 데모에서는 추가 버튼을 눌러 권한을 요청할 수 있지만, 예를 들어 UI 오브젝트를 잡는 방식으로도 요청할 수 있습니다.
- 사용자 상태(상태 권한 또는 프록시)에 따라 UI의 가시성(alpha)이 달라질 수 있습니다.
- 사용자 상태에 따라 서로 다른 UI를 가질 수 있습니다.
이 데모에서 사용된 UI는 예시용으로 제공된 것이며, Unity Hands Interaction 데모 씬에 포함된 UI를 수정한 버전입니다.
의존성
- XRShared 애드온 필요
다운로드
이 애드온의 최신 버전은 Industries 애드온 프로젝트에 포함되어 있습니다.
지원되는 토폴로지
- 공유 모드
변경 로그
- 버전 2.0.0: 최초 릴리즈