New 58+ tools are now available — built to keep your workflow moving.

Build Immersive Vision Pro Apps with Unity’s XR Toolkit

A step‑by‑step guide that shows how to use Unity’s new XR Toolkit to create Vision Pro experiences powered by eye‑tracking and hand gestures.

A Admin 5 min read

Apple’s Vision Pro has turned spatial computing from a niche curiosity into a mainstream platform, and Unity’s freshly released XR Toolkit gives developers a purpose‑built framework for the device. If you’re eager to turn a concept into a hands‑free, eye‑driven experience, this guide walks you through every configuration, code snippet, and best‑practice tip you need to launch an immersive app on Vision Pro.

Why Vision Pro and Unity’s XR Toolkit Matter Now

Core capabilities of Vision Pro

Vision Pro blends high‑resolution passthrough video with a dedicated silicon stack that supports real‑time eye‑tracking, hand‑gesture recognition, and spatial audio. The device treats the user’s gaze as a primary cursor, letting developers design interactions that feel natural without a controller.

What the XR Toolkit adds

Unity’s XR Toolkit abstracts the low‑level SDK calls into reusable components: XR Interaction Manager, XR Direct Interactor, and XR Ray Interactor. The toolkit also ships with ready‑made input actions for eye‑tracking and hand gestures, meaning you can focus on content rather than plumbing.

Prerequisites and Setup

Hardware and software requirements

  • Apple Vision Pro (or the Vision Pro Simulator on macOS)
  • Mac running macOS 14 or later
  • Unity 2022.3 LTS or newer
  • Xcode 15+ for building the iOS‑based bundle

Installing Unity and the XR Toolkit

  1. Download Unity Hub and install the latest LTS version.
  2. During the Unity install, enable the Apple Vision Pro module under “Add modules”.
  3. Open Unity Hub, create a new project, and select the 3D URP template.
  4. In the Unity Package Manager, add the XR Interaction Toolkit (version 2.5 or later).
  5. Also add the VisionOS XR Plug‑in package.

Creating Your First Vision Pro Project

Project template selection

Select the URP (Universal Render Pipeline) template because Vision Pro’s high‑density display benefits from the performance optimizations and shader features URP provides out of the box.

Configuring XR Plug‑in Management

Navigate to Edit → Project Settings → XR Plug‑in Management. Enable the VisionOS loader and leave the default settings for now. Unity will automatically add the required visionOS build target.

Enabling Eye‑Tracking and Hand‑Gesture Input

Adding XR Interaction components

In your scene, create an empty GameObject named XR Interaction Manager and attach the XR Interaction Manager component. Then add a XR Direct Interactor to the Camera hierarchy—this will interpret the user’s gaze as a direct pointer.

using UnityEngine.XR.Interaction.Toolkit;

public class VisionProGaze : MonoBehaviour { void Awake() { var manager = FindObjectOfType<XRInteractionManager>(); var interactor = gameObject.AddComponent<XRDirectInteractor>(); interactor.interactionManager = manager; } }

Mapping gestures to actions

Vision Pro exposes three primary hand gestures: pinch, air‑tap, and drag. The XR Toolkit’s XR Interaction Profile includes a Hand Gesture Input Action asset you can bind to Unity’s Input System.

  • Open Window → Package Manager → Input System and enable the package.
  • Create an Input Action Asset named VisionProActions.
  • Add an action map called HandGestures with actions Pinch, AirTap, and Drag.
  • Assign the corresponding XRHandGesture bindings from the VisionOS SDK.

Now you can attach these actions to any XRBaseInteractable component, letting objects respond to a pinch or air‑tap without extra code.

Building Spatial UI with Hand‑Tracking

Using UI Toolkit for 3D UI

Unity’s UI Toolkit can render UIElements in world space. Create a UIDocument and set its Render Mode to World Space. Position the UI document a comfortable distance (about 0.5 m) from the user’s default eye level.

var ui = new GameObject("SpatialUI");
var doc = ui.AddComponent<UIDocument>();
doc.panelSettings = Resources.Load<PanelSettings>("PanelSettings");
ui.transform.position = Camera.main.transform.position + Camera.main.transform.forward * 0.5f;

Anchoring UI to real‑world space

Vision Pro lets you anchor content to a physical surface using its spatial mapping API. Add a XR Anchor component to the UI GameObject and set the Anchor Type to Plane. When the user looks at a table, the UI will snap to that plane, preserving depth and occlusion.

Testing and Debugging on Vision Pro

Using the Vision Pro Simulator

The Vision Pro Simulator runs as a macOS app and mirrors the headset’s view. In Unity, switch the build target to visionOS and click Play. The simulator will display eye‑tracking debug visualizers, letting you verify gaze rays and hand pose detection.

Deploying to a device

When you’re ready for real hardware, connect Vision Pro via USB‑C, open Xcode, and select the device as the run destination. Unity will generate an Xcode project; from there, you can sign the app with your Apple Developer ID and install it directly.

Performance Tips for Immersive Apps

Optimizing render scale

Vision Pro’s displays run at 90 Hz with a very high pixel density. To keep frame times under 11 ms, set the URP Render Scale to 0.85–0.9 for most scenes. You can dynamically lower the scale during heavy UI interactions and restore it when idle.

Reducing latency

Eye‑tracking latency is critical for comfort. Use the XRInputSubsystem.TryGetEyeGaze method inside LateUpdate so the gaze ray aligns with the final rendered frame. Avoid heavy physics calculations in Update; move them to a separate job or run them less frequently.

Publishing Considerations

Apple’s App Store guidelines

Apple requires that Vision Pro apps respect user privacy: never record eye‑tracking data without explicit consent, and always provide a clear opt‑out. Additionally, the UI must be readable at a minimum of 10 deg visual angle, so test your text sizes in the simulator’s “Accessibility” mode.

Packaging with Unity

Before building, enable Strip Engine Code and IL2CPP in the Player Settings. This reduces binary size and improves launch times on the headset. Finally, run Unity’s Build Report to verify that the VisionOS architecture (arm64) is the only target.


How do I debug hand‑gesture recognition issues?

Use the Vision Pro Simulator’s Gesture Debug Overlay (found under Window → XR → Gesture Debugger) to see real‑time confidence scores for pinch, air‑tap, and drag. If confidence is low, check that the hand‑tracking layer is enabled in the XR Plug‑in settings and that your Input Action bindings match the SDK’s gesture IDs.

Was this helpful? Leave a like or tell us below.

Comments (0)

Be the first to share feedback on this post.

Related posts

View all