레거시 XRShared
XRShared 애드온은 Fusion과 호환되는 XR 환경을 만들기 위한 기본 컴포넌트를 제공합니다.
아키텍처 및 상세 설명
이 애드온에서 제공하는 컴포넌트들과 동일한 로직은 VR Shared 샘플에서 확인할 수 있으며, 선택 이유에 대한 심층적인 설명도 포함되어 있습니다.
기능
리그 로직: 하드웨어 및 네트워크 리그
개념은 VRShared 샘플의 Rigs 항목 참조
다음 스크립트는 리그의 다양한 부위(헤드셋, 왼손, 오른손, 리그 루트)의 위치를 수집하는 데 사용됩니다:
HardwareRig
HardwareHeadset
HardwareHand
이후, 해당 위치/회전 데이터를 로컬 사용자로부터 수집하고 모든 플레이어에게 동기화하는 네트워크 스크립트는 다음과 같습니다:
NetworkRig
NetworkHeadset
NetworkHand
핸드 스크립트에서는 기본적인 손 상태(검지, 엄지, 잡기 위치) 또한 동기화됩니다.

잡기 기능
이 애드온은 기본적인 잡기 기능을 시연하며, 두 가지 방식이 제공됩니다.

네트워크 핸드 기반 잡기
완전한 네트워크 기반 잡기 개념은 VR Shared 샘플의 Grabbing 항목 참조
이 방식에서는, 잡을 수 있는 객체 위에 네트워크 핸드의 콜라이더가 겹치는지 감지합니다.
잡을 수 있는 오브젝트에는 NetworkHandColliderGrabbable
컴포넌트가 있어야 하며, NetworkHand
에는 NetworkHandColliderGrabber
컴포넌트가 있어야 합니다.
하드웨어 핸드 기반 잡기
하드웨어 리그에서 잡기를 시작하는 방식은 Local rig grabbing 페이지 참조
이 방식에서는 하드웨어 핸드의 콜라이더를 통해 겹침을 감지하며, 네트워크에 연결되지 않은 객체에도 사용할 수 있습니다.
비네트워크 잡기를 위해서는, 잡을 수 있는 오브젝트에 Grabbable
컴포넌트가, 하드웨어 핸드에는 GrabberComponent
가 있어야 합니다.
네트워크 잡기의 경우, 위 컴포넌트들 외에 NetworkGrabbable
컴포넌트가 오브젝트에, NetworkHand
에는 NetworkGrabber
컴포넌트가 필요합니다.
이동 (Locomotion)
자세한 내용은 Teleport & locomotion 항목 참조
이 애드온은 간단한 텔레포트를 활용한 기본 이동을 시연합니다.
RayBeamer
클래스는 라인 렌더러 기반 빔을 표시하고, 트리거 해제 시 HardwareRig
옆에 위치한 RigLocomotion
이 리그 이동을 수행합니다.
RigLocomotion
스크립트는 스냅 회전 기능도 처리합니다.

데모
데모 씬은 Assets\Photon\FusionAddons\XRShared\Demo\Scenes\
폴더에 있습니다.
지원되는 토폴로지
- 공유 모드
변경 로그
- 버전 2.0.12:
- 유니티 6용 머티리얼 파라미터 업데이트
- 연결 해제 시 발생할 수 있는 권한 처리 오류 수정
- 버전 2.0.11:
- 유니티 호환성 추가
- FindObjectOfType()과 같은 사용되지 않는 메서드 제거
- DespawnObject 클래스 추가
- NetworkRig 클래스에 useNetworkRigAsPlayerObject 옵션 추가
- 버전 2.0.10:
- SharedAuthorityExtensions 유틸에 IsStateAuthorityPresent 추가
- 버전 2.0.9:
- 손에 오브젝트를 특정 위치에 맞춰 배치하는 스냅 포인트 정의 기능 추가
- 참조 기준 이동을 쉽게 해주는 TransformManipulations 라이브러리 추가
- SharedAuthorityExtensions의 EnsureHasStateAuthority 수정 및 AffectStateAuthorityIfNone 헬퍼 추가
- FPSDisplay, DisplayVersion, DisconnectionManager 등의 헬퍼 클래스 추가 (연결 해제 시 메시지 표시 등)
- 버전 2.0.8:
- 빠른 손 이동 시 발생할 수 있는 조기 잡기를 방지하기 위해 프록시 잡기 외삽 비활성화
- 버전 2.0.7:
- visionOS에서 Polyspatial 사용 시 발생할 수 있는 OnBecameVisible 문제 해결
- 버전 2.0.6:
- XRShared에 기본 피드백 컴포넌트 추가
- 공통 머티리얼 및 UI 요소를 포함한 SharedDesign 폴더 추가
- PrefabSpawner에 쿨다운 기능 추가
- IContactHandler 인터페이스 추가
- Toucher가 NetworkObject에서 원격 사용자에게 콜백을 트리거 하지 않도록 기본값 설정 (터처 부모의 상태 권한만 콜백 가능)
- NetworkGrabbable에서 상태 권한 상실 시 자동으로 잡기 해제
- 버전 2.0.5:
- Oculus XR 플러그인 사용 시 XRControllerInputDevice 위치 수정
- RigLocomotion에서 스냅 회전 일시 비활성화 가능
- 기본 UserSpawner 스크립트 추가
- HideRenderers 스크립트 추가
- 버전 2.0.4:
- 비활성화된 Grabber 컴포넌트로 잡기 방지
- 하드웨어 핸드에 참조 변환 추가: 첫 번째 활성 트랜스폼을 기준으로 위치 조정
- WeaverHelper 및 PackagePresenceCheck 개선
- 버전 2.0.3:
- IColorProvider 및 IFeedbackHandler 인터페이스 추가
- GrabbableColorSelection 추가
- 버전 2.0.2:
- Unity 2021.x와 호환성 확보 (2022.x에서 편집한 박스 콜라이더가 2021.x에서 크기가 잘못됨)
- 프로젝트 간 계층 자동 설정을 단순화하는 layer utils 추가
- 버전 2.0.1:
- Polyspatial 설치 시 HideForLocalUser에서 VolumeCamera 처리 추가
- 버전 2.0.0:
- 첫 릴리즈