PICO tutorial project
Build the demo for a PICO headset, connect the gloves, try the four demos, then add haptics to an object of your own.
1. Before you start
| You need | Why |
|---|---|
| A PICO 4, 4 Ultra or Neo3 | Hand tracking; there is no controller fallback |
| Unity 6000.6.0f1 | The version the project is saved with |
| Git on your PATH | Unity fetches the HEXR package through git. Without it every HEXR script opens missing |
| HEXR gloves | Only to feel it. Everything builds and runs without them |
2. Build and install
git clone https://github.com/MicrotubeTechnologies/HexR-Developer-Tutorial-Pico.gitOpen it in Unity 6000.6.0f1
The first open takes a long time: Unity is fetching
com.microtube.hexrand importing thousands of assets. Let it finish. The PICO OpenXR plugin is already inPackages/.Put the headset in developer mode
Settings → General → About, tap the software version until developer options appear, then Settings → Developer → USB Debugging. Plug it in and accept the prompt inside the headset.
Build And Run
File → Build Profiles → Android → Switch Platform, then Build And Run. Every build setting is already in the project.
Git is missing from your PATH. Run git --version; if it fails, install git and restart Unity.
3. Connect the gloves
First, allow the app to see Bluetooth devices. In the headset: Settings → Apps → HexR developer tutorial XR → Permissions, allow Nearby devices and Location, then relaunch.
It is almost always these two permissions.
The app opens in passthrough with the HexR panel floating to your left. Press its buttons with your index fingertip; grab the header to move it.
Power on the arm module
Press Connect Left Glove
The button shows the status: searching, connected, then ready with the battery level.
Then Connect Right Glove
Each hand is its own connection with its own battery.
Show Colliders draws the six touch points on each hand: five fingertips and the palm. A haptic fires when one of them enters an object.
4. Try the demos
Everything is in one scene. The panel’s DEMOS buttons switch between four groups. Every haptic is a component on an object; the table under each group says which.
Grab Demo
| Object | Do this | You feel | How |
|---|---|---|---|
| Apple | Pick it up | Pressure on thumb, index and middle | HexRInteractableHaptics next to the XR Grab Interactable |
| Key | Pinch it | A pinch on thumb, index and middle | Same component |
| Torch | Grab it, then put a finger in the flame | The whole hand squeezes; a finger in the flame buzzes | Same component on all channels; a SpecialHaptics zone (Custom Vibrations) around the fire |
| Heart | Pick it up and hold it | A slow, steady heartbeat | A SpecialHaptics zone (Heart Beat) |
Rain Demo
| Object | Do this | You feel | How |
|---|---|---|---|
| Fountain | Put your hand in the water | A fine spray on every finger and the palm | SpecialHaptics zone, Fountain |
| Rain | Hold your palm under the cloud | Random taps, like drops landing. Only the palm triggers it | SpecialHaptics zone, Rain Drop |
Puzzle Demo
Can you light every bulb by pressing the buttons? Each button feels different.
| Object | Do this | You feel | How |
|---|---|---|---|
| Button 1 | Poke it | A slow pulse on the whole hand | The XR Simple Interactable’s Select events call TriggerAllVibrations(0.6) and RemoveAllVibrations() |
| Button 2 | Poke it | A steady press | Same events, TriggerAllHapticsIncrease(0.4) |
| Button 3 | Poke it | A 10 Hz buzz | Same events, TriggerAllVibrations(10) |
Medical Demo
| Object | Do this | You feel | How |
|---|---|---|---|
| Wrist and neck | Rest two fingertips there | A pulse, about 60 a minute | SpecialHaptics zones, Heart Beat |
| Mouth | Hold your hand near it | A faint, slow breath | Same effect, light and slow |
How it works
You build the app the ordinary XR Interaction Toolkit way. HEXR reads what XRI already knows — grabbed, hovered, poked — and adds the feel. Three ways to fire haptics, all in the demos:
| Way | Put this on the object | Used by |
|---|---|---|
| Component | HexRInteractableHaptics beside the XR Grab Interactable. Pick fingers and strength. Nothing to wire | Apple, key, torch |
| Zone | A trigger collider + SpecialHaptics. Press Auto Find Hand Physics, pick an effect | Flame, fountain, rain, heart, pulse |
| Event | An interactable’s Select Entered / Exited calling a Pressure Controller method | The buttons |
The numbered scenes in Assets/Scenes/ each isolate one of these: 1.Basic Tutorial (component), 2.Special Haptics (zones), 3.Button (events). Open one, select an object, read its Inspector.
5. Add haptics to your own object
Give it an XR Grab Interactable
As you would without HEXR.
Add HexRInteractableHaptics beside it
Tick the fingers, set a strength. Leave Backend on Auto.
Press Play, grab it
With a glove connected, you feel it. No events to wire.
For a surface instead of a grab, use a zone: trigger collider + SpecialHaptics. For a button, call a Pressure Controller from its Select events and give it a ProximityCheck child.
assets/img/shots/unity-hexr-menu.png| HexR menu | Use it to |
|---|---|
| Create HexR Rig → Open XR | Set up a new scene: rig, Pressure Controllers, wiring |
| Troubleshoot → Validate Scene Setup | Check hands, Pressure Controllers and touch points |
| Troubleshoot → Re-run Auto Setup | Re-wire after you change the scene |
| HexR Tools | Haptics Tester (fire any channel in Play mode) and Project Setup |
Gloves connected on the panel? Permissions allowed? For an event-driven object, is there a ProximityCheck? Then run Validate Scene Setup.
Where to go next
| If you want to… | Read |
|---|---|
| Add HEXR to a project of your own | Unity integration |
| See every component and method | SDK architecture & API |
| Build the same demo for Meta Quest | Meta Quest walkthrough |
Stuck? Talk to us, or open an issue on the tutorial repository ↗.