Troubleshooting Guide

Unity 6.3 LTS + Meta Quest 3S
Step-by-Step Build & Black Screen Fix

Follow these phases in order. Each phase resolves one category of failure. Stop when your app renders correctly in the headset.

Which guide should I use?

Use this step-by-step guide if you have never built to the Quest before, or if you want to check every setting from the beginning.

Use the Specific Situations & Behaviors page if you've built successfully before and only one thing is going wrong (such as a specific error or a black screen with a clear symptom).

Before you begin: Open File → Build Settings in Unity. Make sure your game scene is in the list AND has a checkmark next to it. Also check that the Console window at the bottom of Unity has no red errors. These two checks take 10 seconds and rule out the most common mistakes.
Vocabulary — what do these words mean?
OpenXR
The standard system Unity uses to talk to VR headsets like the Quest.
XR Origin
The "rig" in your scene that represents the player's headset and hands. Replaces the regular Camera for VR.
Tracked Pose Driver
A component on the camera that makes it follow the headset's movement.
AndroidManifest
A file inside every Android app (including Quest apps) that tells the device what kind of app it is and what permissions it needs.
Intent / category
A tag inside the AndroidManifest. The "VR" category is what tells the Quest "launch this in 3D immersive mode, not as a flat phone app."
Multi-view
A way of drawing both eyes at the same time (faster). The opposite is Multi-pass (slower, draws each eye separately).
URP
Universal Render Pipeline — Unity's modern graphics system, used by most Quest projects.
IL2CPP
The system Unity uses to convert your C# code into a form the Quest can run. Required for Quest builds.
ARM64
The type of processor inside the Quest 3S. Your build must target this architecture.
Linear color space
A more accurate way of handling colors. VR needs this — the older "Gamma" mode makes everything look wrong.
Gradle
The build tool Unity uses behind the scenes to package your app into an APK file.
APK
The file format for an Android app — what gets installed on the Quest.
Sideloading
Installing an app on the Quest that did NOT come from the official store. Anything you build yourself is sideloaded.
adb
Android Debug Bridge — a small program that lets your PC talk to the Quest through a USB cable. Used for advanced troubleshooting.
Horizon OS
The operating system that runs on the Quest headset, made by Meta.
How to read the menu paths in this guide: When you see something like Edit › Project Settings › XR Plug-in Management, that means: click the Edit menu at the top of Unity, then click Project Settings in the menu that opens, then click XR Plug-in Management in the window that appears. Each arrow means "click into the next thing."
1

Set up OpenXR for Quest 3S

The most common cause of a black screen — check this first
About 5 minutes 📍 All steps inside Unity
1
Open the XR Plug-in Management settings

A window opens. At the top of the window you'll see icons for different platforms.

Click the Android tab (the little green robot icon).

Make sure OpenXR has a checkmark.

Note: If "Oculus" is also checked, uncheck it. You can only use one at a time, and using both causes problems in Unity 6.

You'll know it worked when: OpenXR has a checkmark, and a new "OpenXR" item appears in the left sidebar of the window.

2
Turn on Meta Quest Support

Find Meta Quest Support in the list and put a checkmark next to it.

What this does: It adds a special tag to your app called the "VR category." This tag tells the Quest, "This is a VR app — launch it in full 3D mode." Without this tag, the Quest treats your app like a flat phone app, which is why you'd see a black screen.

You'll know it worked when: Meta Quest Support shows a checkmark and a small gear icon appears next to it.

This is the #1 most common cause of a black screen on Quest 3S. Verify this before anything else.
3
Tell Unity that Quest 3S is your target headset

Click the gear icon next to Meta Quest Support. A new view opens with checkboxes for different Quest models.

Under Target Devices, check Quest 3S. Also check Quest 3 — this makes your app work on more headsets.

Note: If you don't list Quest 3S here, the Quest might refuse to launch your app in full VR mode, even though everything else is set up correctly.

You'll know it worked when: Quest 3S has a checkmark in the Target Devices section.

4
Turn on a controller interaction profile

Still under OpenXR settings, look for the section called Interaction Profiles.

Click the + button and add at least one of these:

  • Meta Quest Touch Plus Controller Profile (best for Quest 3S)
  • Oculus Touch Controller Profile (works as a fallback)

What this does: Tells Unity how to talk to the Quest controllers. Without this, the VR session won't fully start up on the headset.

You'll know it worked when: At least one profile appears in the Interaction Profiles list.

5
Run Project Validation to catch other problems

This opens a window that lists any problems with your VR setup.

Click Fix All to fix the red errors automatically.

You can leave the yellow warnings for now — they're suggestions, not errors.

You'll know it worked when: The window shows "No issues detected" or only yellow warnings remain.

6
Check for an old custom AndroidManifest file

In Unity's Project window (bottom of the screen), look for this file:

Assets/Plugins/Android/AndroidManifest.xml

If this file does NOT exist, skip this step — Unity will create one automatically. You're done with Phase 1.

If this file DOES exist, double-click to open it. Look for this line near the top:

<category android:name="com.oculus.intent.category.VR" />

If the line is missing, add it inside the <intent-filter> section.

If you're not sure whether this file is needed, the safest option is to delete it and let Unity generate a fresh one.

Test before continuing

Save your project (Ctrl + S), then Build and Run to your Quest (File → Build Settings → Build and Run).

Does the app launch into 3D? If yes, you're done — congratulations! If no, continue to Phase 2.

Phase 2 — Player & API settings
2

Check Player Settings for Android & Quest

Wrong settings here can cause silent black screens with no error message
About 3–5 minutes 📍 All steps inside Unity
1
Set the Android version numbers your app supports

Scroll down and check that each of these values matches the table below:

SettingRequired value
Minimum API Level
The oldest Android version your app supports
Android 10 (API 29)
Target API Level
The Android version your app is built for. Meta requires API 34 for store submissions as of March 2026.
Android 14 (API 34) or API 35
Scripting Backend
How your C# code gets converted for the Quest
IL2CPP
Target Architectures
The type of processor in the Quest
ARM64 only (uncheck x86 if present)
Color Space
How Unity handles colors. VR needs Linear.
Linear
If you change Color Space from Gamma to Linear, Unity will re-import all your textures. This can take several minutes the first time. This is normal — don't close Unity while it happens.
2
Set the Graphics API

Still in Other Settings, scroll up to find Graphics APIs.

The order of items in this list matters — the FIRST item is what the Quest will use.

  • The first item should be Vulkan (this is the recommended one for Quest 3S)
  • If Auto Graphics API is checked, UNCHECK it — auto-mode can pick a setting that doesn't work on the Quest
  • If Vulkan gives a black screen later, you can come back here and try OpenGLES3 instead to see if that helps
3
Set Render Mode to Multi-view

Find the setting called Render Mode and set it to Multi-view.

What this means: "Multi-view" draws both eyes at the same time, which is faster. The other option, "Multi-pass," draws each eye separately and can show a black screen on the standalone Quest — even if everything else looks fine when using a Link cable.

Test before continuing

Save (Ctrl + S) and Build and Run again.

Does it work now? If yes, you're done. If no, continue to Phase 3.

Phase 3 — Scene setup
3

Check your scene for VR

Scenes that work via Link cable can still fail on the standalone build
About 5 minutes 📍 All steps inside Unity
1
Make sure your scene is in the build

Look at the Scenes In Build list at the top of the window.

Your main game scene must be listed AND have a checkmark next to it.

If it's not there, drag your scene from the Project window into the list.

Why this matters: If only an empty default scene is in the build, your app will show a black screen with no errors at all. This is one of the easiest mistakes to miss.

2
Check that you have an XR Origin in your scene

Open your Hierarchy window (left side of Unity).

You should have a GameObject called XR Origin with this structure:

XR Origin └─ Camera Offset └─ Main Camera ← must have Tracked Pose Driver here

What this is: The XR Origin is the "rig" that represents the player in VR. It replaces the regular Camera you'd use in a non-VR game.

If you only have a plain Camera with no XR Origin parent, the VR system has nothing to attach to — and nothing will render.

To add an XR Origin: right-click in the Hierarchy → XR → XR Origin (VR).

3
Check the Tracked Pose Driver on the Main Camera

Click on the Main Camera in your Hierarchy (it's inside XR Origin).

In the Inspector (right side), look for a component called Tracked Pose Driver.

It should have these bindings:

  • Position Input → centerEyePosition [XR HMD]
  • Rotation Input → centerEyeRotation [XR HMD]

What this does: The Tracked Pose Driver is what makes your camera follow the headset when you move your head. If these fields are empty, or if they're bound to a mouse/keyboard input, the camera will stay stuck in one spot — often inside the floor or a wall, which looks black.

4
Make sure there's an XR Interaction Manager in your scene

In the Hierarchy, type XR Interaction Manager into the search bar at the top.

If nothing shows up, create one: right-click in the Hierarchy → Create Empty. Name it "XR Interaction Manager." With it selected, go to the Inspector and click Add Component → XR Interaction Manager.

Why this matters: The XR Interaction Toolkit needs this to work. Without it, you'll get errors when your scene starts that can stop the whole thing from rendering.

5
Check your URP Renderer Data settings

In the Project window, click the search bar and type t:UniversalRendererData.

Click on the result. The Inspector will show the settings. Check these:

SettingRequired value
Intermediate TextureAuto
Post Processing → EnabledOff (unchecked)
Rendering PathForward or Forward+
Post-processing effects like Bloom, Ambient Occlusion, or Depth of Field can cause black screens on Quest because they use image formats the Quest doesn't support. Turn Post Processing OFF first to confirm your scene renders correctly. Once it works, you can re-enable effects one at a time to find which one causes the problem.
Test before continuing

Save and Build and Run again.

Does it work? If yes, you're done. If no, the next two phases use the command line — they're more advanced. Consider asking your teacher for help, or continue if you're comfortable using Command Prompt.

Stuck? When to ask for help. If you've completed Phases 1–3 and the app still shows a black screen, save this guide as a bookmark or print it out, then show your teacher exactly which steps you've already tried. The next two phases use a command-line tool called adb, and getting help in person is often faster than working through it alone.
Phase 4 — Confirm the build reached the device
4

Confirm your build reached the device

More Advanced
Uses adb (a command-line tool) — needs Command Prompt
About 5 minutes 📍 Uses Command Prompt
What is adb? adb stands for "Android Debug Bridge." It's a small program that lets your PC send commands to your Quest through the USB cable. It's a tool developers use, so don't worry if you've never seen it before.
1
Open Command Prompt on your Windows PC

Press the Windows key + R at the same time. A small "Run" window opens.

Type cmd and press Enter. A black window opens — this is Command Prompt.

You'll know it worked when: You see a black window with text like C:\Users\yourname> and a blinking cursor.

2
Check that your PC can see the Quest

Plug the Quest 3S into your PC with a USB-C cable.

Put the headset on. If you see a popup that says "Allow USB Debugging?", check "Always allow" and click "Allow." (If you don't see the popup, that's fine — it may have been answered already.)

Take the headset off. In Command Prompt, type this and press Enter:

C:\> adb devices

You'll know it worked when: You see a line like 1WMHH9XXXXX device. The word "device" means everything is working.

If you see "unauthorized" instead of "device": Put the headset on again and look for the USB debugging popup. Accept it, then run adb devices again.

If you see "adb is not recognised as an internal or external command": Your PC can't find adb. Use the full path instead:
C:\Users\[your-username]\AppData\Local\Android\Sdk\platform-tools\adb.exe devices
3
Check that the app actually installed on the headset

Put the headset on. Press the Meta button to open the menu, then open the App Library.

At the top right of the library, there's a filter dropdown. Set it to Unknown Sources.

Look for your app. If it's there, the build installed successfully.

If your app is NOT there, the build didn't actually reach the headset. Go back to Unity and try File → Build Settings → Build and Run again.

An app with the default Unity logo (the white cube on a black square) means the app installed but is not registered as a VR app. Go back to Phase 1, Step 2 and double-check that Meta Quest Support is enabled.
Phase 5 — Read the error log
5

Capture the error log from the headset

More Advanced
When all else fails, the headset's log file will tell you what's wrong
About 10 minutes 📍 Uses Command Prompt
What is a log? Apps write notes to themselves as they run, called "log messages." When something goes wrong, the log usually says what happened. This phase captures the Quest's log to a file so you can read it.
1
Start recording the log

Make sure the headset is still plugged in.

In Command Prompt, type this command exactly as written and press Enter:

C:\> adb logcat -s Unity OpenXR VrApi AndroidRuntime > "%USERPROFILE%\Desktop\quest_log.txt"

What this does: It tells adb to record everything the Quest's Unity-related parts say, and save it to a file called quest_log.txt on your Desktop.

Command Prompt will look frozen — that's normal. It's recording.

2
Launch your app on the headset and wait

Put the headset on. Open your app from the Unknown Sources list.

Let it sit on the black screen for about 15 seconds. During that time, the headset is writing log messages.

Take the headset off. Go back to Command Prompt and press Ctrl + C to stop recording.

3
Open the log and look for the error

On your Desktop, you should now have a file called quest_log.txt.

Double-click it to open it (Notepad will open it by default).

Press Ctrl + F to open the search bar. Search for each of these phrases in order. The first one you find is likely your problem:

Search for this in the logWhat it means
category.VR not foundMeta Quest Support is not enabled. Go back to Phase 1, Step 2.
xrGetVulkanGraphicsDevice2KHRVulkan graphics problem. Try switching to OpenGLES3 (Phase 2, Step 2).
FATAL EXCEPTIONOne of your scripts crashed on startup. The lines right above this error will name the script.
XRGeneralSettings awakening with nothing afterThe OpenXR plugin may be out of date. Update it through Window → Package Manager.
NullReferenceExceptionA script is trying to use something that doesn't exist yet. Often a missing reference in the Inspector.
Entitlement for packageName not foundDeveloper Mode is not enabled on the headset. Enable it in the Meta Horizon mobile app.
Still stuck? If the error in your log isn't on this list, search for the exact error text on the Unity Discussions site (discussions.unity.com) or show the log to your teacher.
How do I check what version of Unity / OpenXR I have?

Unity version: In the Unity Hub, look next to your project name. Or inside Unity, click Help → About Unity.

OpenXR Plugin version: Open Window → Package Manager. Click "In Project" in the dropdown at the top. Find "OpenXR Plugin" in the list and click it. The version number is shown on the right.

XR Interaction Toolkit version: Same as above, but find "XR Interaction Toolkit" in the list.

Quest headset OS version: Put the headset on. Go to Settings → System → Software Update. Your current version is shown at the top.

If everything worked

Your app should launch into a 3D environment visible in your Quest 3S, and the app icon in your library should reflect a VR app (not the default Unity cube). If you got here without success, your specific error message from Phase 5 is the next clue to investigate.

Tip: If you'll be troubleshooting away from your computer, use Ctrl + P to print this guide. The glossary and all sections will be included.