Skip to content

Releases: pmndrs/react-xr

v3.6.0

18 Jul 11:29
Compare
Choose a tag to compare

What's Changed

Changes

We'll be releasing v4 shortly with react 18/R3F v8 support. Due to breaking changes in @types/three, r141 support will also follow in v4.

This release backports some important fixes and features for stability and performance.

XRButton and XRCanvas

The internal XRButton and XRCanvas are now exported with expanded configuration options for session init and XRManager settings (see Custom XRButton and XRCanvas).

Expanded XRCanvas

XRCanvas is now exported for custom canvases. It's also expanded with session configuration options and listeners.

<XRCanvas
  /**
   * Enables foveated rendering. Default is `0`
   * 0 = no foveation, full resolution
   * 1 = maximum foveation, the edges render at lower resolution
   */
  foveation={0}
  /** Type of WebXR reference space to use. Default is `local-space` */
  referenceSpace="local-space"
  /** Called as an XRSession is requested */
  onSessionStart={(event: XREvent<XRManagerEvent>) => ...}
  /** Called after an XRSession is terminated */
  onSessionEnd={(event: XREvent<XRManagerEvent>) => ...}
  /** Called when an XRSession is hidden or unfocused. */
  onVisibilityChange={(event: XREvent<XRSessionEvent>) => ...}
  /** Called when available inputsources change */
  onInputSourcesChange={(event: XREvent<XRSessionEvent>) => ...}
>
  {/* All your regular react-three-fiber elements go here */}
</XRCanvas>

Customizeable XRButton

Internal XRButton and XRCanvas were refactored to exist in React and init session state outside of XR context, so buttons can exist outside of the canvas. This is fully backward compatible with previous versions that utilize three's VRButton & ARButton.

<XRButton
  /* The type of `XRSession` to create */
  mode={'AR' | 'VR' | 'inline'}
  /**
   * `XRSession` configuration options
   * @see https://immersive-web.github.io/webxr/#feature-dependencies
   */
  sessionInit={{ optionalFeatures: ['local-floor', 'bounded-floor', 'hand-tracking', 'layers'] }}
  /** Whether this button should only enter an `XRSession`. Default is `false` */
  enterOnly={false}
  /** Whether this button should only exit an `XRSession`. Default is `false` */
  exitOnly={false}
>
  {/* Can accept regular DOM children and has an optional callback with the XR button status (unsupported, exited, entered) */}
  {(status) => `WebXR ${status}`}
</XRButton>

Furthermore, XRButton can be composed with XRCanvas to smoothly integrate with your UI. For example, this would be equivalent to VRCanvas:

<XRButton mode="VR" sessionInit={{ optionalFeatures: ['local-floor', 'bounded-floor', 'hand-tracking', 'layers'] }} />
<XRCanvas>
  // ...
</XRCanvas>

New Contributors

Full Changelog: v3.5.0...v3.6.0

v3.5.0

30 May 05:18
Compare
Choose a tag to compare

What's Changed

Full Changelog: v3.4.0...v3.5.0

v3.4.0

11 Feb 16:34
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v3.2.0...v3.4.0

v3.3.0

31 Jan 17:40
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v3.2.0...v3.3.0

v3.1.0

06 May 19:37
Compare
Choose a tag to compare
  • Fixed GLTFLoader bug #48
  • Updated Hands component with new oculus model
  • Breaking: removed profile prop from Hands component. Now will only load deafult hands

v2.0.2

21 Mar 12:20
Compare
Choose a tag to compare

v2.0.1

11 Mar 15:27
Compare
Choose a tag to compare
  • fix useHitTest hook to work with latest threejs version

v2.0.0

27 Jan 20:25
Compare
Choose a tag to compare

Breaking changes:

  • Hover, Select components are removed and replaced by Interactive component

Added:

  • <Interactive /> component - allows attaching event handlers to the content in the scene
  • useInteraction hook - attach events to an existing object in the scene
  • const { player, isPresenting } = useXR() - added player Group and isPresenting variables
  • useHitTest - hook to perform hit tests in AR mode

v1.1.0

30 Aug 15:28
Compare
Choose a tag to compare
  • Added useController hook
  • Reworked how controllers are loaded, now controllers are available only when inputSource is present
  • Handled 'disconnect' event for the controller
  • Added experimental Hands component
  • Added 'examples/' folder

v1.0.6

21 May 16:09
Compare
Choose a tag to compare
  • Removed XRCanvas
  • Added VRCanvas and ARCanvas for VR and AR modes respectively