Meta Quest tutorial project
Sideload the finished demo, walk its three scenes with the floating panel, and see how every object in them fires haptics.
Try it on a headset first
Put the finished demo on your Quest and feel what you are about to build. No Unity, no compiling.
Download the Quest APK (84 MB) ↓The scenes run and hand-tracking works without one, so you can look around and see how everything is put together — but nothing will actuate until a HEXR glove is connected.
Quest headsets do not install APKs from a file manager; push the build from a computer with SideQuest ↗ or adb:
adb install -r HexR-Developer-Tutorial-MetaOVR.apkBoth need Developer Mode on the headset (Meta Quest phone app → your headset → settings). The app then appears under Unknown Sources, not with your store apps.
Give the headset its Bluetooth permissions
Do this before you launch the app. The glove talks over Bluetooth Low Energy, and Android will not let an app find a BLE device without these. Skip it and the app looks broken: it runs, but the glove never appears.
In the headset: Settings → Privacy and Security → App Permissions.
| Permission | Set to |
|---|---|
| Location | Precise — not just “allowed” |
| Nearby devices | On |
“The app runs but the glove never connects.” It is almost always these two permissions. Check them before suspecting the hardware or your code.
The floating panel
Every scene has the HexR panel floating to your left. Press its buttons with your index fingertip; grab the header to move it. It stays with you when you change scene.
assets/img/shots/meta-panel.jpg| Section | Buttons | What they do |
|---|---|---|
| GLOVES | Connect Left Glove · Connect Right Glove | Connects that glove. The button label shows the status: searching, connected, then ready with the battery level |
| VIEW | Show Colliders | Draws the six touch points on each tracked hand — five fingertips and the palm — so you can see where touch is detected |
| SCENES | 1.Basic Tutorial · 2.Hospital Tutorial · 3.Water Effects | Loads that scene. The current one is highlighted |
assets/img/shots/meta-show-colliders.jpgTo connect: power on the arm module, press Connect Left Glove, wait for “ready”, then the right. Each hand is an independent connection with its own battery.
The scenes
Each scene isolates one idea. Every haptic in them is a component on an object — select the object in Unity and read its Inspector to see how it was done.
| Scene | What it teaches |
|---|---|
| 1. Basic Tutorial | Four props, four ways to trigger feedback: hover and grab, pinch, palm grab with a flame zone, and a poke button |
| 2. Hospital Tutorial | Feeling a patient’s pulse: heartbeat zones on a mannequin |
| 3. Water Effects | Zones you reach into: a fountain and rain |
1. Basic Tutorial
Four props on a desk, each with an info card behind it. Grabbing is Meta’s Interaction SDK; HEXR only adds the feel.
assets/img/shots/meta-1-basic.jpg| Object | What to do | How the haptics fire | What you feel |
|---|---|---|---|
| Foam | Reach for it and pick it up | HexRInteractableHaptics next to Meta’s Grabbable, set to Select and Hover. No events wired | Pressure on thumb, index, middle and palm from the moment the hand hovers it, held while grabbed |
| Key | Pinch it between thumb and index | Meta’s Pointable Unity Event Wrapper: When Select calls TriggerPinchPressure(0.3), When Unselect calls RemoveAllHaptics() | A light pinch on thumb and index the instant it is picked up |
| Torch | Palm-grab it, then put a finger into the flame | Grab: the event wrapper calls TriggerAllHapticsIncrease(0.5). Flame: a SpecialHaptics zone (Custom Vibrations, 30.6 Hz) on a trigger box around the fire | All six channels squeeze when grabbed; any finger in the flame vibrates |
| Big red button | Poke it | Meta’s Interactable Unity Event Wrapper on the poke interactable: When Select calls TriggerAllVibrations(10), When Unselect calls RemoveAllVibrations() | All six channels vibrate at 10 Hz while the button is held in |
Its info card says “Collision Haptics — ensure collider is set to trigger”. That describes an older setup. The foam now uses HexRInteractableHaptics on Meta’s hover and grab, with a solid collider, as the table says.
The foam uses a component that reads Meta’s interaction state on its own. The key, torch and button use events wired in the Inspector to a Pressure Controller method. The torch uses both, plus a zone for the flame. All three routes are covered in Customising the haptics.
2. Hospital Tutorial
A mannequin on a hospital bed. The card reads: “You may place your index and middle finger on the patient wrist and neck to feel his pulse.”
assets/img/shots/meta-2-hospital.jpg| Object | What to do | How the haptics fire | What you feel |
|---|---|---|---|
| Wrist and neck pulse zones (two each) | Rest two fingertips on the wrist or the neck | A trigger box on each spot with SpecialHaptics set to Heart Beat, regular rhythm, pressure 0.4, 0.4 s on and 0.3 s off | A steady pulse in whichever fingertips are inside the zone, about 86 beats a minute. It stops when you lift them |
There is nothing to grab here: the zones fire on contact alone, so this is the pattern for any surface that should feel alive.
3. Water Effects
A fountain and a storm cloud. Both are zones you reach into.
assets/img/shots/meta-3-water.jpg| Object | What to do | How the haptics fire | What you feel |
|---|---|---|---|
| Fountain | “Place your palm in the water fountain” | A trigger capsule over the water with SpecialHaptics set to Fountain | Every fingertip and the palm inside the water vibrate, a fine spray at 18 Hz |
| Rain | “Place your palm under the raindrops” | A large trigger capsule under the cloud with SpecialHaptics set to Rain Drop | Random fingers tap at random, like drops landing. Only the palm touch point triggers it, so hold your hand flat |
The HexR menu in Unity
Open the project and the HexR menu appears in Unity’s menu bar. It is how the tutorial scenes were set up, and how you set up your own.
assets/img/shots/unity-hexr-menu.png| Item | Use it to |
|---|---|
| Create HexR Rig → Meta OVR | Add the rig and the Pressure Controllers to a new scene and wire them up |
| Add Pressure Controller | Add the pair of Pressure Controllers to a scene that has none |
| Add HexR Menu | Put the floating panel in a scene of your own |
| Troubleshoot → Re-run Auto Setup | Re-wire the hands and touch points after you change the scene |
| Troubleshoot → Validate Scene Setup | Check every hand, Pressure Controller and touch point; it lists what is unwired |
| HexR Tools | A window with a Haptics Tester (fire any channel in Play mode), the validator as a checklist, and Project Setup |
| Migration | One-off upgrades for older projects |
A good first exercise: open 1.Basic Tutorial, run Validate Scene Setup, and read what it checks. Then select the torch and follow its components in the Inspector.
Get the project
Clone it and open it in Unity 6 (6000.0 or newer). The Meta XR SDK pinned here (com.meta.xr.sdk.all 205) sets that floor, not HEXR itself.
git clone https://github.com/MicrotubeTechnologies/HexR-Developer-Tutorial-Meta-OVR.gitThe first open takes a while and can look hung: Unity is fetching com.microtube.hexr from GitHub. The package is a git dependency pinned to a release tag in Packages/manifest.json, so git must be on your PATH, or every HEXR script opens missing.
You also need the free Meta XR All-in-One SDK on your Unity account, installed from Package Manager → My Assets. For OpenXR, use the PICO tutorial instead.
| Where | What it holds |
|---|---|
Assets/Scenes/ | The three tutorial scenes |
Packages/manifest.json | Names the HEXR package and its tag. The package itself lands in Library/PackageCache/, which is regenerated |
Assets/Tutorial/Art/ | Models, materials and effects for the scenes. Nothing HEXR-specific |
Customising the haptics
Three routes, all used in the demo. They mix freely.
1. A component — HexRInteractableHaptics
Give the object Meta’s Grabbable and HandGrabInteractable as usual, then add HexRInteractableHaptics beside them. Nothing to wire: it reads the interaction state Meta already has. This is the foam.
| Setting | What it does |
|---|---|
| Backend | Leave on Auto; it follows the rig, which is what lets the same object work on PICO |
| Fire on | Select (grabbed or pressed), Hover (near enough to highlight), or both |
| Fingers | Thumb, index, middle, ring, pinky and palm, independently |
| Strength | How firm the feedback is |
| Follow grip | Scales the pressure by how far the fingers have closed |
2. An event — Meta’s event wrappers
Meta’s Pointable Unity Event Wrapper (grabs) and Interactable Unity Event Wrapper (poke) raise UnityEvents at the instant a grab, pinch or poke is recognised. Drag a Pressure Controller onto the event and pick a method. This is the key, torch and button.
| Wire this event | To this method on PressureTrackerMain |
|---|---|
| When Select | TriggerAllHapticsIncrease(float) — pressure 0.1–1 on every channel; TriggerPinchPressure(float) — thumb and index; TriggerAllVibrations(float) — vibration, the number is the frequency in Hz |
| When Unselect | RemoveAllHaptics() or RemoveAllVibrations() |
3. A zone — SpecialHaptics
A trigger collider plus SpecialHaptics: press Auto Find Hand Physics, choose an effect. This is the flame, the pulse, the fountain and the rain. Size the collider to the sensation, not the mesh.
A zone answers “is a finger inside this region?” — right for surfaces and materials. An event answers “has this object been grabbed?” — right for discrete actions. The torch uses both.
Pressure Controller calls only fire while HEXR thinks the hand is near the object. On Meta that signal comes from the grab and poke interactors, so grabbing and poking handle it. For a zone on something that is not an interactable, add a ProximityCheck. HexR → Troubleshoot → Validate Scene Setup flags the rest. The full picture is in the hand-near check.
Build settings
The project is already configured for Quest. A fresh clone needs only:
Switch to Android
File → Build Settings → Android → Switch Platform. The first switch reimports every asset.
Check the headset is connected
With Developer Mode on and the headset plugged in, it appears under Run Device. Accept the “Allow USB debugging” prompt inside the headset.
Build And Run
Builds, installs and launches. Build alone gives you an APK to distribute.
| Setting | Value |
|---|---|
| Minimum API level | Android 10 (API 29) |
| Target architecture | ARM64 only |
| XR plug-in provider | Oculus |
| Texture compression | ASTC |
The tutorial ships as com.Microtube.HexRTest, product name “HexR Test”. Change both in Player Settings before you distribute anything.
Where to go next
| If you want to… | Read |
|---|---|
| Add HEXR to a project of your own | Unity integration |
| See how the package fits together, and every method | SDK architecture & API |
| Understand what triggers feedback and when | Triggering feedback |
| Build the same demo for PICO | PICO walkthrough |
Stuck? Talk to us, or open an issue on the tutorial repository ↗.