This document is about: FUSION 2
SWITCH TO

UI 동기화

Fusion XR 프로토타이핑 애드온

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

Fusion UI 동기화

구현 방법

UI를 동기화하려면 다음을 수행하세요:

  • 동기화할 UI 요소(또는 여러 UI 요소의 상태 권한을 함께 관리해야 하는 경우 상위 오브젝트)에 NetworkObject 컴포넌트를 추가합니다. UI 상태 권한이 사용자 간에 전환될 수 있는 경우, Allow State Authority Override 옵션을 활성화하세요.
  • 해당 UI 컴포넌트에 맞는 동기화 스크립트를 추가합니다 (UISync_Button은 버튼, UISync_Slider는 슬라이더 등).

컴포넌트

Button

UISync_ButtonButton 컴포넌트를 동기화하는 데 사용됩니다.
로컬 사용자가 버튼과 상호작용할 때를 감지하기 위해 onClick 이벤트를 수신합니다.
로컬 사용자가 컴포넌트에 대한 상태 권한이 없고 프록시의 상호작용이 허용된 경우 (disableInteractionWhenNotStateAuthority == false), 권한을 요청합니다.
로컬 사용자가 버튼에 대한 상태 권한을 가질 경우, 버튼이 눌릴 때마다 ButtonClickValue 네트워크 변수가 증가합니다.

따라서 원격 사용자(프록시)는 다음과 같이 동기화됩니다:

  • 버튼 컴포넌트에 시각적 피드백이 표시됩니다.
  • onButtonTouched 이벤트가 발생합니다.

Toggle

UISync_ToggleToggle 컴포넌트를 동기화하는 데 사용됩니다.
로컬 사용자의 상호작용을 감지하기 위해 onValueChanged 이벤트를 수신합니다.
상태 권한이 없고 프록시의 상호작용이 허용된 경우 권한을 요청합니다.
상태 권한을 가진 로컬 사용자가 토글을 조작할 때마다 ToggleIsOn 네트워크 변수가 갱신됩니다.

따라서 원격 사용자(프록시)는 다음과 같이 동기화됩니다:

  • onToogleValueChanged 이벤트가 발생합니다.

UISync_DropdownDropdown 컴포넌트를 동기화하는 데 사용됩니다.
로컬 사용자가 새로운 항목을 선택할 때 onValueChanged 이벤트를 수신합니다.
상태 권한이 없는 경우 권한을 요청합니다.
상태 권한을 가진 사용자가 새로운 항목을 선택하면 DropdownValue 네트워크 변수가 갱신됩니다.

따라서 원격 사용자(프록시)는 다음과 같이 동기화됩니다:

  • 드롭다운에서 해당 항목이 선택됩니다.
  • onDropdownValueChanged 이벤트가 발생합니다.

Slider

UISync_SliderSlider 컴포넌트를 동기화하는 데 사용됩니다.
로컬 사용자의 상호작용을 감지하기 위해 onValueChanged 이벤트를 수신합니다.
상태 권한이 없는 경우 권한을 요청합니다.
상태 권한을 가진 사용자가 슬라이더 값을 변경할 때마다 SliderValue 네트워크 변수가 갱신됩니다.

따라서 원격 사용자(프록시)는 다음과 같이 동기화됩니다:

  • 슬라이더 값이 갱신됩니다.
  • onSliderValueChanged 이벤트가 발생합니다.

ScrollRect

UISync_ScrollRectScrollRect 컴포넌트를 동기화하는 데 사용됩니다.
로컬 사용자의 스크롤 조작을 감지하기 위해 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: 최초 릴리즈
Back to top