visionOS 헬퍼
이 모듈은 유니티의 Polyspatial을 사용하여 visionOS 애플리케이션을 구축하고, 이를 크로스 플랫폼으로 확장하는 데 도움이 되는 몇 가지 컴포넌트를 제공합니다. 이 모듈은 적절한 손 추적 동기화와 제스처 감지를 제공하기 위해 XRHands 애드온을 사용하며, Polyspatial의 비제한 모드에서 이를 구현합니다.
공간 터치
visionOS 플랫폼은 콜라이더가 있는 객체와 상호작용하기 위한 특정 제스처(터치, 핀치, 간접 핀치)를 제공합니다. 유니티의 Polyspatial은 이러한 동작을 노출하며, 애드온의 SpatialTouchHandler
클래스는 이러한 상호작용을 감지합니다.
만약 씬에 SpatialTouchHandler
가 있고, 상호작용하는 객체에 ISpatialTouchListener
를 구현하는 컴포넌트가 있으면, 해당 객체는 관련 콜백을 받습니다.
공간 터치를 통한 잡기
XRShared 애드온에서 사용된 것과 동일한 컴포넌트를 사용하여 잡기 기능을 구현하려면, SpatialGrabber
및 NetworkSpatialGrabber
를 사용하여 HardwareHand
/NetworkHand
쌍에 연결되지 않은 추가 "손"을 사용할 수 있습니다.
이는 비제한 볼륨 모드에서 거리를 두고 잡을 수 있도록 하거나, 일반적인 손이 없는 제한 모드에서도 사용할 수 있습니다.
"일반적인" 잡기에 관해서는, 손이 객체에 놓인 경우, 하드웨어 리그 그랩버를 사용하여 손의 위치를 사용하거나 visionOS 공간 그랩버를 사용할 수 있습니다. SpatialTouchHandler
컴포넌트에서 hardwareRigGrabberDisabled
옵션을 통해 두 가지 옵션 중에서 선택할 수 있습니다:
hardwareRigGrabberDisabled
가 true(기본값)로 설정된 경우, 잡힌 객체의 움직임이 더 부드러워집니다. visionOS에서는 손 뼈가 공간 터치 위치보다 덜 자주 갱신되므로, 손의 움직임을 기준으로 객체를 움직이면 객체가 떨릴 수 있습니다.hardwareRigGrabberDisabled
가 false로 설정된 경우, 잡힌 객체는 손과 동기화 상태를 유지하지만, 손의 실제 위치가 아니라 공간 터치 API 결과를 기반으로 하므로 약간의 위치 차이가 발생할 수 있습니다. 이는 손 모델이 표시되는 경우 관련이 있을 수 있습니다.
볼륨 모드 동기화
제한된 볼륨 모드와 비제한 볼륨 모드를 모두 처리하는 애플리케이션의 경우, 원격 사용자에게 선택한 모드를 경고하는 것이 중요합니다. 예를 들어, 제한 모드에서는 아바타를 사라지게 할 수 있습니다.
이를 쉽게 수행하기 위해 VisionOsVolumeCameraModeSync
는 네트워크 리그에 배치된 경우 로컬 사용자의 모드를 동기화합니다. 또한, 제한 모드에서 모든 사용자 렌더러를 자동으로 숨길 수 있는 hideAllChildRenderersInBoundedVolume
옵션도 제공합니다.
볼륨 모드 변경 처리
VolumeCameraConfigurationSelector
클래스는 볼륨 모드를 변경하는 편리한 방법을 제공합니다. 이 컴포넌트가 있는 객체를 활성화하면, Polyspatial의 VolumeCamera
볼륨 구성이 이미 동일하지 않은 경우 자동으로 volumeConfiguration
으로 변경됩니다. 추가로, 볼륨 모드별로 특정 게임 객체를 쉽게 활성화/비활성화할 수 있습니다.
크로스 플랫폼 컴포넌트
공간 그랩을 지원하도록 개선된 그랩 동작과 XR Hands 외에도, 크로스 플랫폼 경험을 구축하는 데 도움이 되는 몇 가지 도구가 제공됩니다.
터치
SpatialTouchable
은 ISpatialTouchListener
와 ITouchable
을 모두 구현하여 공간 터치와 일반 터치 모두에 반응하며, 모든 플랫폼에서 작동합니다.
SpatialButton
은 토글 버튼이나 라디오 버튼으로 사용할 수 있는 SpatialTouchable
의 향상된 버전입니다.
UI
모든 플랫폼에서 visionOS 창과 유사한 동작을 제공하기 위해 ConstrainedGrabbable
클래스를 사용하여 잡을 수 있는 창을 비슷한 방식으로 이동할 수 있습니다(창이 잡힌 동안 사용자를 바라보며 적절한 위치를 보장).
LineMesh
현재 LineRenderer
컴포넌트는 Polyspatial과 호환되지 않습니다. 포함된 LineMesh
컴포넌트는 메시를 생성하는 간단한 대안을 제공합니다.
저장된 Point
는 메시 정점 색상에 영향을 미치는 color
속성을 포함합니다. Polyspatial과 호환되는 샘플 셰이더 LineSG
는 이 정점 색상 정보를 사용하여 메시를 렌더링 합니다.
LineRenderers
에 의존하는 컴포넌트가 있는 경우, LineRendererToLineMesh
는 라인 렌더러 정보를 사용하여 LineMesh
를 자동으로 제공하는 방법을 제공합니다.
자동 손 구성
XRHandsSync 애드온의 손을 사용하는 경우, VisionOSHandsConfiguration
은 Polyspatial vision OS 플랫폼에 맞게 손을 자동으로 구성하는 빠른 방법을 제공합니다.
스크립트는 다음을 보장합니다:
- 손이 짧은 시간 동안 감지되지 않더라도,
FingerDrivenControllerInput
의 손가락 감지에 의해 트리거 된 그랩이 계속됩니다. LineMesh
를 사용하여RayBeamer
컴포넌트가 사용하는 빔을 표시합니다.- 모든 콜라이더에 특정 레이어를 적용하여, visionOS에 의해 처리되는 콜라이더에서 제거되도록 하여, 그랩/터치 콜라이더가 visionOS에 의해 공간 터치되지 않도록 보장합니다(원하지 않는 경우).
- 손이 감지되지 않을 경우, 손 표현 컴포넌트가 컨트롤러로 대체되지 않도록 보장합니다(visionOS에는 손 컨트롤러가 없기 때문에).
종속성
- XRShared
- VoiceHelpers
- VisionOSHelpers
- ConnectionManager
다운로드
이 애드온의 최신 버전은 Industries 애드온 프로젝트에 포함되어 있습니다.
무료 XR 애드온 프로젝트에도 포함되어 있습니다.
지원되는 토폴로지
- 공유 모드
변경 로그
- 버전 2.0.4: XRShared 2.0.2와의 호환성 추가
- 버전 2.0.3:
- LineMesh 포인트가 나타나지 않을 수 있는 몇 가지 경우 수정(경로에서 잘못 계산된 법선)
- 네임스페이스 및 주석 추가
- 버전 2.0.2: SpatialTouchHandler에서 직접 핀치 그랩 지원(hardwareRigGrabberDisabled 옵션, 기본값으로 활성화됨) 및 다중 공간 그랩 추가
- 버전 2.0.1: define 체크 추가(Fusion이 아직 설치되지 않은 경우를 처리하기 위해)
- 버전 2.0.0: 첫 번째 릴리스