STEP 0Before you start
- Unity version: use
Unity 6000.3.9f1, the same as the XRWorld headset app. Bundles built with another version may not open in the app. - Packages: in the Package Manager, install
Addressables 2.8.1andAddressables for Android 1.0.10(the same versions as the app). The render pipeline is URP. - Build target: switch to Android (Meta Quest) in File › Build Profiles. Bundles built for Windows cannot be used on the headset.
- We recommend a separate Unity project just for making scenes.
STEP 1Make the scene
Create and save a scene (.unity) as usual. The XRWorld app loads the scene additively and moves all of its root objects to the classroom's shared spatial anchor. Keep the following in mind.
- The origin (0, 0, 0) becomes the classroom reference point. Put the floor at y = 0 and the view students should face first toward +Z.
- Do not include a camera, XR Origin, AudioListener or EventSystem. The app handles the viewpoint and thumbstick movement.
- New C# scripts are not carried in the bundle. Addressables ships assets, not code. Only built-in Unity components (Animator, particles, physics, audio and so on) and scripts already inside the XRWorld app (such as XRWorld Sync Object) will run.
- Objects need a collider for the presenter's beam to hit them. The beam passes through objects without one.
- The scene's skybox and lighting are used as they are. Keep polygon counts and texture sizes light for the headset.
STEP 2Mark the scene Addressable
- Open Window › Asset Management › Addressables › Groups. The first time, click Create Addressables Settings.
- Select the scene file in the Project window and tick Addressable in the Inspector (or drag it into the Groups window).
- Change the address (Addressable Name) to a short English name, for example
City. This name becomes the Drive folder name later. - We recommend only one Addressable scene per build (one folder = one scene).
STEP 3Remote build settings and building
Set the Addressable Asset Settings (Assets/AddressableAssetsData/AddressableAssetSettings in the Project window) and the group as follows.
| Where | Setting | Value |
|---|---|---|
| Settings › Catalog | Build Remote Catalog | On |
| Settings › Catalog | Enable Json Catalog | On (XRWorld reads JSON catalogs only) |
| Settings › Catalog | Player Version Override | e.g. 0.1.0 → catalog_0.1.0.json |
| Settings › Catalog | Build & Load Paths | Remote |
| The scene's group | Build & Load Paths | Remote |
| Profiles | Remote.BuildPath | Default ServerData/[BuildTarget] |
| Profiles | Remote.LoadPath | Any address works, e.g. http://localhost/[BuildTarget] — during class the app rewrites it to the teacher PC |
Run Build › New Build › Default Build Script in the Groups window. These files appear in ServerData/Android/ in the project folder.
ServerData/Android/ ├─ catalog_0.1.0.json ← catalog (required) ├─ catalog_0.1.0.hash ← catalog hash (required) └─ *.bundle ← scene and shared bundles (everything the catalog uses)
.json and .hash, it was built as Local. Recheck the Remote settings above. Empty ServerData/Android before rebuilding so old catalogs do not mix in.STEP 4Upload the folder to Google Drive
Inside the Google Drive folder linked in the XRWorld dashboard, create a folder with the same name as the address from STEP 2 and put the build files in it.
My Drive/xrworld/ ← folder linked in the dashboard
└─ UnityScenes/ ← any folder for organizing
└─ City/ ← folder name = scene address
├─ catalog_0.1.0.json
├─ catalog_0.1.0.hash
└─ *.bundle
Use whichever upload method you prefer.
- Google Drive for desktop: create the folder under
G:\My Drive\…in File Explorer and copy the files. - drive.google.com: create the folder and drag the files in.
- XRWorld dashboard › Upload a whole PC folder: uploads the catalog, hash and bundles of a folder containing a catalog to Drive only (you register it in the next step).
addressables_content_state.bin and desktop.ini are not needed. They are left out on registration anyway.STEP 5Register it as a scene in the Drive browser
- In the dashboard, open the scene folder (e.g.
UnityScenes/City) in the Drive browser. - The Unity scene folder panel appears and checks that every file the catalog needs is visible. If files are reported missing, click Get access to this folder and select all files (Ctrl+A).
- If the folder name is not an address in the catalog, you will see a warning. Make the folder name match the address from STEP 2.
- Enter a title, category and tags, choose the Scene type (individual unityscene / together unitysceneGroup, STEP 7), then click Register as scene. Unity scenes are registered for class use (private) only.
If you rebuild later and replace the Drive files, open the same folder and click Save scene file list again. The version changes and the teacher app downloads only the changed files.
STEP 6Use it in class
- Add the registered scene to a Class list in the dashboard.
- When you sign in to the teacher PC app, the scene folder is downloaded to the teacher PC as a local copy.
- When you send the scene in class, the XRWorld headset app fetches the catalog and bundles from the teacher PC and opens the scene at the shared spatial anchor. Students move only themselves with the thumbstick, and the presenter points with the beam.
STEP 7Make a shared scene (unitysceneGroup)
In a normal scene (unityscene), every student sees the same scene in the same place, but each has their own world. When one student moves an object, it stays put on everyone else's headset. Register the scene as together (unitysceneGroup) and the room becomes one world: an object one student moves moves to the same place for everyone.
You make it the same way as STEP 0–6. Just add the XRWorld Sync Object component to the objects that should move together.
- Add the SDK file: download
XRWorldSyncObject.csand put it underAssets/in your scene project. Do not rename it and do not put it in a folder with an asmdef (Assembly Definition). The same script is built into the headset app, and the names must match for it to recognize the component in your bundle. - Attach it: select an object students should grab and move, then Add Component › XRWorld › XRWorld Sync Object.
- Enter an Object Id that is unique within the scene (English letters, up to 64 characters). It starts as the object name. Every headset recognizes the same object by this ID.
- Build and upload as in STEP 2–4, and in the STEP 5 registration panel choose Scene type: together (unitysceneGroup). You can switch between individual (unityscene) and together later in the content editor (same bundle).
SyncTest (scene) ├─ Floor ← no component: fixed background ├─ Box1 [XRWorld Sync Object · Object Id = box1] ├─ Box2 [XRWorld Sync Object · Object Id = box2] └─ Globe [XRWorld Sync Object · Object Id = globe] └─ Stand ← children move with the parent (do not add it to children)
In class:
- Only one person can hold an object at a time. Others see that student's name above it and cannot grab it meanwhile.
- Students who join late or reconnect start from the current positions.
- Turn on Only the presenter (★) can grab objects in the teacher PC app's class screen to let only the presenter grab. Sending the same scene again puts every object back in its starting place.
REFERENCESReferences
- Loading Unity Addressables scenes from a remote server (dreamfuture blog, Korean)
- Unity Manual · Get started with Addressables
- Unity Manual · Install Addressables
- Unity Manual · Groups
- Unity Manual · Profiles
- Unity Manual · Enable remote content (Build Remote Catalog)
- Unity Manual · Content catalogs
- Unity Manual · Full build (Default Build Script)
- Unity Manual · Remote content distribution