This document is about: FUSION 2
SWITCH TO

레거시 XRShared

Fusion XR 프로토타이핑 애드온

XRShared 애드온은 Fusion과 호환되는 XR 환경을 만들기 위한 기본 컴포넌트를 제공합니다.

아키텍처 및 상세 설명

이 애드온에서 제공하는 컴포넌트들과 동일한 로직은 VR Shared 샘플에서 확인할 수 있으며, 선택 이유에 대한 심층적인 설명도 포함되어 있습니다.

기능

리그 로직: 하드웨어 및 네트워크 리그

개념은 VRShared 샘플의 Rigs 항목 참조

다음 스크립트는 리그의 다양한 부위(헤드셋, 왼손, 오른손, 리그 루트)의 위치를 수집하는 데 사용됩니다:

  • HardwareRig
  • HardwareHeadset
  • HardwareHand

이후, 해당 위치/회전 데이터를 로컬 사용자로부터 수집하고 모든 플레이어에게 동기화하는 네트워크 스크립트는 다음과 같습니다:

  • NetworkRig
  • NetworkHeadset
  • NetworkHand

핸드 스크립트에서는 기본적인 손 상태(검지, 엄지, 잡기 위치) 또한 동기화됩니다.

Fusion VR Shared Rigs Logic

잡기 기능

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

Fusion VR Shared Grab

네트워크 핸드 기반 잡기

완전한 네트워크 기반 잡기 개념은 VR Shared 샘플의 Grabbing 항목 참조

이 방식에서는, 잡을 수 있는 객체 위에 네트워크 핸드의 콜라이더가 겹치는지 감지합니다.

잡을 수 있는 오브젝트에는 NetworkHandColliderGrabbable 컴포넌트가 있어야 하며, NetworkHand에는 NetworkHandColliderGrabber 컴포넌트가 있어야 합니다.

하드웨어 핸드 기반 잡기

하드웨어 리그에서 잡기를 시작하는 방식은 Local rig grabbing 페이지 참조

이 방식에서는 하드웨어 핸드의 콜라이더를 통해 겹침을 감지하며, 네트워크에 연결되지 않은 객체에도 사용할 수 있습니다.

비네트워크 잡기를 위해서는, 잡을 수 있는 오브젝트에 Grabbable 컴포넌트가, 하드웨어 핸드에는 GrabberComponent가 있어야 합니다.

네트워크 잡기의 경우, 위 컴포넌트들 외에 NetworkGrabbable 컴포넌트가 오브젝트에, NetworkHand에는 NetworkGrabber 컴포넌트가 필요합니다.

이동 (Locomotion)

자세한 내용은 Teleport & locomotion 항목 참조

이 애드온은 간단한 텔레포트를 활용한 기본 이동을 시연합니다.

RayBeamer 클래스는 라인 렌더러 기반 빔을 표시하고, 트리거 해제 시 HardwareRig 옆에 위치한 RigLocomotion이 리그 이동을 수행합니다.
RigLocomotion 스크립트는 스냅 회전 기능도 처리합니다.

Fusion VR Shared Teleport

데모

데모 씬은 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:
    • 첫 릴리즈
Back to top