Learning Mode 04 · Guide

Create and upload
Unity scene content

Build a scene with Unity Addressables and put it in your Google Drive. In a Unity Scene View class, the whole room then steps into the same scene.

← Back to Unity Scene View
① Make the scene in Unity→ ② Mark it Addressable→ ③ Remote build→ ④ Upload the folder to Google Drive→ ⑤ Register it in the Drive browser→ ⑥ Add it to a class list
Shared scenes · To let everyone see the objects students move, see STEP 7 in addition to STEP 0–6.

STEP 0Before you start

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.

STEP 2Mark the scene Addressable

  1. Open Window › Asset Management › Addressables › Groups. The first time, click Create Addressables Settings.
  2. Select the scene file in the Project window and tick Addressable in the Inspector (or drag it into the Groups window).
  3. Change the address (Addressable Name) to a short English name, for example City. This name becomes the Drive folder name later.
  4. 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.

WhereSettingValue
Settings › CatalogBuild Remote CatalogOn
Settings › CatalogEnable Json CatalogOn (XRWorld reads JSON catalogs only)
Settings › CatalogPlayer Version Overridee.g. 0.1.0 → catalog_0.1.0.json
Settings › CatalogBuild & Load PathsRemote
The scene's groupBuild & Load PathsRemote
ProfilesRemote.BuildPathDefault ServerData/[BuildTarget]
ProfilesRemote.LoadPathAny 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)
Check · If there is no .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.

Note · Files such as 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

  1. In the dashboard, open the scene folder (e.g. UnityScenes/City) in the Drive browser.
  2. 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).
  3. 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.
  4. 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

  1. Add the registered scene to a Class list in the dashboard.
  2. When you sign in to the teacher PC app, the scene folder is downloaded to the teacher PC as a local copy.
  3. 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.
Note · Unity scenes open only in the XRWorld app on VR headsets. The web student view (PC, tablet) shows a notice instead.

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.

  1. Add the SDK file: download XRWorldSyncObject.cs and put it under Assets/ 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.
  2. Attach it: select an object students should grab and move, then Add Component › XRWorld › XRWorld Sync Object.
  3. 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.
  4. 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:

Current limits · Only position and rotation are shared. Shared objects have no gravity, throwing or collision pushing (physics is not used). Objects without the component are a fixed background. If an object has no collider, the app adds a box collider the size of its visible shape, so add your own collider for complex shapes. Add the component to one grab unit only, not to both a parent and its child. Shared scene states such as opening a door or advancing a step are not available yet.
Scenes started from the VR template · Be sure to delete the scene's XR Origin and XR Interaction Setup (including controllers and hands). If they remain, the scene's controllers and the app's controllers grab the same object from each other, so it shakes and drops (the app turns them off, but deleting them is safer). If an object already has an XR Grab Interactable, as the samples do, keep it and add XRWorld Sync Object to that same object.

REFERENCESReferences