Build and Test VRChat Worlds for Android and Quest
A world uploaded for Android is available to VRChat users on Meta Quest and Android phones or tablets. The same build serves devices with very different controls, screens, and performance characteristics, so the world needs both technical optimization and mobile interaction testing.
This guide concentrates on world production. Use the broader compatibility checklist when you also need avatar limits or iOS platform setup.
Switch the SDK platform early, optimize the world as a mobile scene, and test the result directly on an Android or Quest device.
- Install Android Build Support for VRChat's supported Unity editor.
- Select Android in the SDK Builder and let Unity reimport the project.
- Check world size, textures, materials, lighting, occlusion, shaders, and active systems.
- Test the complete world with touch and Quest controls.
- Publish the Android build under the same world ID as the PC version.
In VRChat's SDK documentation, Quest guidance generally applies to Android. Publishing the Android version makes the world available on Quest and Android mobile clients.
Set Up the Android Target
- Confirm the project uses VRChat's supported Unity editor.
- In Unity Hub, verify that Android Build Support is installed for that editor.
- Open VRChat SDK > Show Control Panel.
- Select Builder.
- In the platform selector, deselect Windows and select Android.
- Confirm the change and wait for the platform import to finish.
- Review the Android-specific validation results.
Creator Companion normally installs Android Build Support with the supported editor. If Android cannot be selected, add the module through Unity Hub and reopen the project.
Keep the Android Build Attached to the PC World
The PC and Android versions must use the same blueprint ID to appear as one cross-platform world.
- Publish the first platform version.
- Preserve its blueprint ID when preparing the second platform.
- Use the SDK Content Manager to find an existing world ID when needed.
- Do not detach the Pipeline Manager unless you intend to create a separate world entry.
Players then receive the version built for their platform while joining the same world and instance system.
Android World Budgets
| Measurement | Current VRChat guidance |
|---|---|
| Compressed world size | Must not exceed 100 MB after build-time compression. |
| World geometry | Budget approximately 250,000 triangles for the world so there is room for player avatars. |
| Texture dimensions | Aim for 1K textures or smaller; use larger textures only when the asset justifies the cost. |
| Materials | Minimize material count while retaining useful object separation. |
| Lighting | Bake lighting, use light probes, and keep lightmap resolution controlled. |
| Visibility | Bake occlusion culling so hidden world sections do not render unnecessarily. |
Treat these as a starting budget, not proof that the world runs well. The actual view, active systems, and number of visible players still affect performance.
Check Build Size and Memory
The Android world cannot exceed 100 MB after build-time compression.
After a build:
- review the SDK result
- inspect Unity's Editor log for build statistics when diagnosing size
- identify the largest textures, audio files, meshes, and media assets
- remove assets not used by the shipped scene
- reduce texture import sizes before lowering many unrelated settings
Crunch compression can reduce download size, but it does not reduce the texture's in-memory cost. Keep the uncompressed asset footprint and runtime memory use in view as well.
Optimize Geometry, Materials, and Visibility
VRChat recommends approximately 250,000 world triangles for Android.
For scene organization:
- combine closely related props where that reduces unnecessary renderer and material overhead
- keep major rooms, buildings, and occlusion regions separate
- reduce material slots and atlas related surfaces
- enable GPU instancing on materials
- bake occlusion culling
- verify that occlusion areas and portals match the final geometry
Over-merging a world can make occlusion less effective because Unity can no longer hide the merged section independently.
Use the Unity Profiler to compare draw calls and component time. A desktop profile does not reproduce mobile hardware, but it can still identify a system that costs disproportionately more than the rest of the scene.
Optimize Textures, Lighting, and Shaders
For textures:
- aim for 1024 × 1024 or smaller
- pack compatible surfaces into sensible atlases
- reduce Max Size on low-priority textures
- use compression appropriate to the Android target
- avoid relying on Crunch as a memory optimization
For lighting:
- bake static lighting
- use light probes for moving objects
- keep lightmap resolution low enough for the platform budget
- remove real-time lights that are not essential
Android worlds can use custom shaders, unlike Android avatars. Custom shader support does not guarantee acceptable performance. VRChat recommends Mobile/VRChat/Lightmapped as an efficient basic world shader and advises avoiding unnecessary transparency because alpha fill rate is costly on mobile GPUs.
Audit Active World Systems
Test the cost and behavior of:
- mirrors and additional Cameras
- real-time lights and shadows
- post-processing
- video players
- Audio Sources
- Particle Systems
- Rigidbodies, Colliders, and Joints
- constraints
- Udon behaviours
- large animated objects
Some component restrictions documented for Android avatars do not apply identically to worlds. Test the world component itself instead of assuming the avatar restriction is the world rule.
Design for Touch, Desktop, and VR Input
Android mobile players use touchscreen controls, while Quest players use VR controllers.
| Interaction area | Mobile-world check |
|---|---|
| Text | Use legible fonts, large type, short labels, and sufficient contrast. |
| Buttons | Use large targets with forgiving interaction areas. |
| Navigation | Provide clear back, close, and return actions. |
| Core interactions | Do not require a VR-only gesture or precise controller movement. |
| Menus | Consider screen-space UI when a distant world-space canvas is difficult on a phone. |
| Orientation | Recheck layouts when the screen resolution or orientation changes. |
Udon can respond to OnInputMethodChanged and query GetLastUsedInputMethod. Use VRCInputMethod.Touch when the world needs to provide a touchscreen-specific path.
The OnScreenUpdate event can help a world respond to resolution or orientation changes. Use the current VRChat API documentation when implementing these events.
Test the World on Android
VRChat's SDK uses Android Debug Bridge to send a test build to an Android phone, tablet, or Quest.
Prepare the device:
- Enable developer mode.
- Enable USB debugging.
- Connect the device with a data-capable USB cable.
- Accept the debugging authorization prompt.
- Launch the VRChat app on the device at least once.
For the first world test:
- Close the VRChat app on the Android device.
- Keep the device unlocked.
- Confirm Unity is targeting Android.
- Select Build and Test New Build in the SDK Builder.
- Wait for the build transfer and VRChat launch.
- Sign in if prompted and enter the test world.
For later iterations, use Build and Test New Build again to rebuild, transfer, and reload the world.
USB debugging gives the connected computer significant access to the device. Use it only with trusted development machines and tools.
Mobile World Test Matrix
Run the same route on more than one input method:
| Test | Quest | Android phone or tablet |
|---|---|---|
| Spawn and onboarding | Check comfort, scale, and controller reach | Check screen readability and touch controls |
| Navigation | Check locomotion and doors | Check virtual joysticks and camera movement |
| Menus | Check pointer distance and target size | Check touch targets and screen-space options |
| Media and audio | Check playback and spatial audio | Check controls, loading, and volume |
| Activities | Check VR interactions | Confirm an equivalent non-VR completion path |
| Performance | Check headset frame pacing | Check heat, responsiveness, and loading |
Use feedback from players on the actual target device. A PC preview cannot confirm touch ergonomics or mobile runtime performance.
Publish the Android Version
After device testing:
- Return to the SDK Builder with Android selected.
- Confirm the world uses the PC world's blueprint ID.
- Review world information and content warnings.
- Resolve blocking Android validations.
- Select the online publishing build.
- Confirm the Android platform entry appears under the intended world in Content Manager.
Re-test the published world from a normal Quest or Android client after upload.
Android World Problems
Android is unavailable in the SDK Builder.
Install Android Build Support for the exact VRChat-compatible Unity editor through Unity Hub, then reopen the project and select Android in the SDK platform control.
The Android build created a separate world.
The build used a different blueprint ID. Find the original PC world in Content Manager and restore that ID to the Android world before publishing it as the matching platform version.
The world exceeds the 100 MB Android limit.
Inspect the build statistics and reduce the largest textures, audio files, meshes, and unused assets. Crunch can reduce download size but does not solve the in-memory texture cost.
Build and Test cannot find the device.
Check developer mode, USB debugging, the device authorization prompt, and the USB cable's data support. Disconnect other debugging-enabled devices so the SDK targets the intended client.
The world runs poorly even though it uploads.
Profile draw calls and active systems, then review texture memory, materials, real-time lighting, transparency, cameras, mirrors, particles, media, physics, and visible geometry. Upload size alone is not a runtime-performance measurement.
Phone players cannot complete a world activity.
Trace the activity with touch controls and replace VR-only gestures, distant world-space controls, or precise controller movements with an accessible mobile interaction path.
Android World Release Checklist
- Android Build Support is installed for the project editor.
- Android is selected in the SDK Builder.
- PC and Android worlds share the same blueprint ID.
- The compressed world build is below 100 MB.
- Textures, materials, lighting, shaders, and occlusion are reviewed.
- Expensive active systems are measured and tested.
- Touchscreen users can read and operate the UI.
- Every required activity has a non-VR interaction path.
- Build and Test succeeds on an Android or Quest device.
- The published Android entry appears under the intended world.
Official References
- VRChat Creation: Set Up Unity for Android Content
- VRChat Creation: Cross-Platform Setup
- VRChat Creation: Build and Test for Android Mobile
- VRChat Creation: Android Content Optimization
- VRChat Creation: Android Content Limitations
- VRChat Creation: Mobile Best Practices
- VRChat Creation: Current Unity Version
- VRChat Creation: Input Events
- VRChat Creation: Udon Event Nodes