Targeted Fix Guide

Unity 6.3 LTS + Meta Quest 3S
Head Tracking Not Working

A focused guide for the specific situation where everything works in your VR app except head tracking. The view stays stuck in one direction no matter how you move your head.

Is this the right guide for me?

Use this guide if ALL of these are true:

If your symptoms don't match — for example, if the screen is black, or controllers don't work — use the Step-by-Step or Specific Situations guides instead.

Why does this happen?

The Quest 3S has cameras and sensors that track where your head is in space. Unity needs to pass that head position into your Main Camera every frame. If something disconnects that flow of information, the camera stays at a fixed point in your scene — but everything else (controllers, lighting, UI) keeps working normally.

The reason controllers still work is that they have their own separate tracking pipeline. So when ONLY head tracking is broken, the problem is almost always in how the Main Camera is set up — not in OpenXR, the headset, or your scripts.

The fastest fix: 9 times out of 10, this issue is solved by Check 1 below (the Tracked Pose Driver bindings). Try that first. If it doesn't work, continue down the list.
Vocabulary — quick reference
XR Origin
The "rig" in your scene that represents the player in VR. Has a Camera Offset inside it, with the Main Camera inside that.
Tracked Pose Driver
A component on the Main Camera that copies the headset's position and rotation onto the camera every frame. The whole reason your view follows your head.
Action / Input Action
A named instruction like "where is the headset right now?" The Tracked Pose Driver listens to these actions to know what data to read.
centerEye
The "average" of your two eyes — what the Main Camera should follow. The opposite is "device" (the whole headset), which doesn't behave correctly for stereo VR.
Tracking Origin Mode
Tells the headset where "(0,0,0)" should be in your scene. "Floor" puts it at floor level (room-scale). "Device" puts it at the headset's starting position (seated experiences).
Guardian / Boundary
The safety boundary you set up on the headset. Until this is set up, head tracking may not work.
1

Check the Tracked Pose Driver bindings

The most common cause — wrong actions are bound to position and rotation
⏱ About 2 minutes 📍 Inside Unity
1
Find your Main Camera

Open the Hierarchy window (left side of Unity).

Find the Main Camera. It should be nested inside XR Origin → Camera Offset. Click on it to select it.

XR Origin └─ Camera Offset └─ Main Camera ← click here
2
Find the Tracked Pose Driver component

Look in the Inspector (right side of Unity). Scroll until you find a component called Tracked Pose Driver (Input System).

If you don't see it at all, skip to Check 3 — your camera is missing the component entirely.

3
Check both bindings carefully

The Tracked Pose Driver has two settings: Position Input and Rotation Input. Each one should point to a specific action.

Correct bindings (what you want to see):

  • Position Input → <XRHMD>/centerEyePosition
  • Rotation Input → <XRHMD>/centerEyeRotation

Common WRONG bindings (these cause stuck head tracking):

  • Position bound to devicePosition instead of centerEyePosition
  • Rotation bound to deviceRotation instead of centerEyeRotation
  • One or both fields are empty (no binding at all)
  • Bindings point to a Mouse, Keyboard, or Gamepad action
How to fix: Click the small target icon next to each field, then in the picker that appears, expand XR HMD and double-click centerEyePosition (for the position field) or centerEyeRotation (for the rotation field).
Test now

Save (Ctrl + S), then Build and Run to your Quest 3S.

Does the world move when you turn your head? If yes, you're done! If no, continue to Check 2.

If that didn't fix it — continue below
2

Make sure Main Camera is inside XR Origin

The camera must be a child of XR Origin → Camera Offset, not floating outside
⏱ About 1 minute 📍 Inside Unity
1
Check your Hierarchy structure

Look at the structure of your scene in the Hierarchy. It should look exactly like this:

XR Origin (XR Rig) ├─ Camera Offset │ └─ Main Camera ← MUST be here ├─ LeftHand Controller └─ RightHand Controller

Common mistake: A separate "Main Camera" sitting at the top level of the Hierarchy, NOT inside XR Origin:

Main Camera ← WRONG: outside XR Origin XR Origin (XR Rig) ├─ Camera Offset │ └─ (no camera here) ← WRONG: empty └─ ...
2
Fix the structure if needed

If your Main Camera is in the wrong place:

1. Click and drag the Main Camera onto the Camera Offset GameObject inside XR Origin. It should become a child.

2. If you have TWO cameras (one outside XR Origin and one inside), delete the one outside. Only one camera should be tagged MainCamera at a time.

3. After moving the camera, click on it and check the Inspector — the Tag at the top should say MainCamera.

If you accidentally deleted the Camera Offset, you can recreate the whole XR Origin: delete the broken one, then right-click in the Hierarchy → XR → XR Origin (VR).
Test now

Save and Build and Run again.

Does head tracking work? If yes, you're done. If no, continue to Check 3.

If that didn't fix it — continue below
3

Look for duplicate or missing components

Sometimes the wrong combination of components is attached to the camera
⏱ About 2 minutes 📍 Inside Unity
1
Select the Main Camera and scroll through ALL its components

Click on the Main Camera in your Hierarchy.

In the Inspector, scroll all the way down through every component on it.

2
Look for two Tracked Pose Drivers (most common problem)

Check if BOTH of these are attached to the Main Camera:

  • Tracked Pose Driver (the old XR Legacy version)
  • Tracked Pose Driver (Input System) (the new version Unity 6 uses)

When both are attached, they fight over the camera's position, which can stop head tracking entirely.

How to fix: Right-click the old Tracked Pose Driver (the one WITHOUT "Input System" in its name) and choose Remove Component. Keep only the Input System version.
3
Check if the Tracked Pose Driver is missing entirely

If you don't see ANY Tracked Pose Driver component on the camera:

  • No Tracked Pose Driver component is attached at all
How to fix: Click Add Component at the bottom of the Inspector. Search for Tracked Pose Driver (Input System) and add it. Then set its bindings using the rules from Check 1.
4
Check for a Constraint component overriding the camera

Look for either of these components on the Main Camera:

  • Parent Constraint
  • Position Constraint or Rotation Constraint

A constraint locks the camera's position or rotation to another object, which prevents the Tracked Pose Driver from updating it.

How to fix: Remove the constraint component, or uncheck its "Is Active" box to disable it for testing.
Test now

Save and Build and Run again.

Working? If yes, you're done. If no, continue to Check 4.

If that didn't fix it — continue below
4

Check the XR Origin's Tracking Origin Mode

A less common cause — but worth checking before moving on
⏱ About 1 minute 📍 Inside Unity
1
Click on the XR Origin GameObject

In the Hierarchy, click on XR Origin (the parent of Camera Offset).

2
Find Tracking Origin Mode and set it correctly

In the Inspector, find the XR Origin component. Look for a setting called Tracking Origin Mode.

Set it to one of:

  • Floor — for room-scale VR where the player can walk around (recommended for most projects)
  • Device — for seated experiences where the player stays in one spot

Avoid:

  • Not Specified — this is the default but can cause tracking to fail to initialize properly
Test now

Save and Build and Run again.

Working? If yes, you're done. If no, the final check is on the headset itself.

Last check — on the headset
5

Check the headset itself

The Quest 3S needs to see its surroundings to track your head
⏱ About 3 minutes 📍 On the headset
1
Set up a Guardian / boundary if you haven't

Put the headset on. If you see a message asking you to set up a play area or Guardian boundary, you MUST complete this setup before tracking will work in any app.

Follow the on-screen prompts to either set up a stationary boundary or a room-scale boundary.

2
Check the room's lighting and surroundings

The Quest 3S uses cameras on the outside of the headset to see your room. It needs:

  • Reasonable lighting (not pitch dark, not blindingly bright)
  • A few visible features in the room (furniture, posters, textured walls)

Tracking can fail or freeze when:

  • The room is very dark
  • The room has all-white blank walls with no features
  • You're facing a mirror or large reflective surface
  • You're outside in bright sunlight
3
Restart the headset

If you've made it this far, try a full restart of the headset itself:

1. Hold the power button on the right side of the headset for about 3 seconds.

2. Select Restart from the menu that appears.

3. Wait for the headset to fully boot up, then open your app again.

Note: The Quest 3S's tracking system occasionally gets into a bad state where it stops sending data to apps. A restart usually clears this.

When everything works

When you turn your head left, right, up, or down, the world rotates smoothly to match. When you lean forward, you can see closer to objects in your scene. When you walk a few steps in your room, your in-game position moves with you. Head tracking should feel natural and instant — if there's any lag or stutter, that's a different issue (usually performance, not setup).

Still not working after all 5 checks? Show this guide to your teacher and tell them you've gone through every check. Be ready to share:
Tip: Print this guide (Ctrl + P) if you're going to work through it next to your headset.