Merge branch 'main' of https://github.com/XRwise/creator-datastructure
This commit is contained in:
@@ -60,7 +60,7 @@ All values are serialized as strings.
|
|||||||
|
|
||||||
| Creator type | `resourcename` | Custom args |
|
| Creator type | `resourcename` | Custom args |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `Cube` | `Cube` | `color`, `opacity` |
|
| `Cube` | `Cube` | `color` |
|
||||||
| `Sphere` | `Sphere` | `color` |
|
| `Sphere` | `Sphere` | `color` |
|
||||||
| `Cylinder` | `Cylinder` | `color` |
|
| `Cylinder` | `Cylinder` | `color` |
|
||||||
| `Cone` | `Cone` | `color` |
|
| `Cone` | `Cone` | `color` |
|
||||||
@@ -71,32 +71,44 @@ All values are serialized as strings.
|
|||||||
|
|
||||||
| Creator type | `resourcename` | Custom args |
|
| Creator type | `resourcename` | Custom args |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `Directional Light` | `Directional Light` | `color`, `intensity`, `target` (`"x,y,z"`) |
|
| `Directional Light` | `Directional Light` | `color`, `intensity`†, `target` (`"x,y,z"`) |
|
||||||
| `Point Light` | `Point Light` | `color`, `intensity` |
|
| `Point Light` | `Point Light` | `color`, `intensity`† |
|
||||||
|
|
||||||
|
> †`intensity` is the key saved in the database, but Unity reads `brightness` — the args will not apply at runtime until this mismatch is resolved. See individual object docs.
|
||||||
|
|
||||||
### Room access
|
### Room access
|
||||||
|
|
||||||
| Creator type | `resourcename` | Custom args |
|
| Creator type | `resourcename` | Custom args |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `Entrance` | `Entrance` | _(none)_ |
|
| `Entrance` | `Entrance` | _(none)_ |
|
||||||
| `Exit` | _(not implemented in save)_ | — |
|
| `GoToOtherRoom` | `GoToOtherRoom` | `RoomName`, `UUID`, `color` _(❌ not yet implemented in Creator or Unity)_ |
|
||||||
|
|
||||||
### Streaming / media
|
### Streaming / media
|
||||||
|
|
||||||
| Creator type | `resourcename` | Custom args |
|
| Creator type | `resourcename` | Custom args |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `Billboard` | `Billboard` | `url` (file path) |
|
| `Billboard` | `Billboard` | `url` (Supabase storage path, signed at runtime) |
|
||||||
| `LiveKitStream` | `LiveKitStream` | `LiveKitRoomID`, `shader`, `GreenScreenColor`, `GreenScreenBorderSettings`, `GreenScreenColorNear`, `widthcrop`, `heightcrop` |
|
| `LiveKitStream` | `LiveKitStream` | `LiveKitRoomID`, `shader`, `GreenScreenColor`, `GreenScreenBorderSettings`, `GreenScreenColorNear`, `widthcrop`, `heightcrop` |
|
||||||
| `VideoWall` | `VideoWall` | `file`, `widthcrop`, `heightcrop` |
|
| `VideoWall` | `VideoWall` | `file`, `shader`, `volume`, `controls`, `autoplay`, `widthcrop`, `heightcrop` |
|
||||||
| `Presentation` | `Presentation` | `file` |
|
| `Presentation` | `PresentationWall` | `file`, `widthcrop`, `heightcrop`, `controls` _(❌ not in Creator)_ |
|
||||||
| `Camera` | `CCTVCamera` | `target` (`"x,y,z"`), `fov` (derived: `zoom * 60`) |
|
| `Camera` | `CCTVCamera` | `target` (`"x,y,z"`), `fov` (derived: `zoom * 60`) |
|
||||||
|
|
||||||
### Other
|
### Other / Props
|
||||||
|
|
||||||
| Creator type | `resourcename` | `type` field | Custom args |
|
| Creator type | `resourcename` | `type` field | Custom args |
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
| `Text` | `Text` | `pre-defined` | `text`, `color`, `fontSize`, `fontWeight` |
|
| `Text` | `Text` | `pre-defined` | `text`, `color`, `fontSize`, `fontWeight` |
|
||||||
| `Custom` | _(the asset filename)_ | `user-defined` | `file` |
|
| `Whiteboard` | `WhiteboardWall` | `pre-defined` | _(none — not serialized by Creator)_ |
|
||||||
|
| `Custom` | _(asset filename)_ | `user-defined` | `file`, `color`, `material` |
|
||||||
|
|
||||||
|
#### `material` values (Custom, Speaker)
|
||||||
|
|
||||||
|
| Value | Shader |
|
||||||
|
|---|---|
|
||||||
|
| `0` | Metallic |
|
||||||
|
| `1` | Unlit |
|
||||||
|
| `2` | Specular |
|
||||||
|
| `3` | FakeEmission |
|
||||||
|
|
||||||
### Common optional arg (all types)
|
### Common optional arg (all types)
|
||||||
|
|
||||||
@@ -140,3 +152,21 @@ All values are serialized as strings.
|
|||||||
"item-custom-args-adv": null
|
"item-custom-args-adv": null
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Example — Custom (user-uploaded GLB)
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"position": { "x": -4.0, "y": 1.0, "z": 0.0 },
|
||||||
|
"rotation": { "x": 0.0, "y": 0.0, "z": 0.0 },
|
||||||
|
"scale": { "x": 1.0, "y": 1.0, "z": 1.0 },
|
||||||
|
"type": "user-defined",
|
||||||
|
"resourcename": "b83a17ab-92bf-4122-a4d0-7b467a105ae0/podest.glb",
|
||||||
|
"item-custom-args": [
|
||||||
|
{ "argument": "file", "value": "b83a17ab-92bf-4122-a4d0-7b467a105ae0/podest.glb" },
|
||||||
|
{ "argument": "color", "value": "#ffffff" },
|
||||||
|
{ "argument": "material", "value": "0" }
|
||||||
|
],
|
||||||
|
"item-custom-args-adv": null
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
# Billboard
|
||||||
|
|
||||||
|
### Type
|
||||||
|
pre-defined
|
||||||
|
|
||||||
|
### 3D
|
||||||
|
The Billboard is a 4m x 2,25m opaque Plane.
|
||||||
|
Its Origin is at the Bottom-Center.
|
||||||
|
Spawnpoint should be {0,1,0} so its 1m above the floor.
|
||||||
|
|
||||||
|
### Custom Args:
|
||||||
|
| Key | Type | Implemented | Description |
|
||||||
|
|---|---|---|---|
|
||||||
|
| url | string | ✔️ | Storage path within `user_files` bucket (e.g. `uuid/image.png`). A signed URL is generated at runtime. |
|
||||||
|
| grabable | `"true"` / `"false"` | ⚠️ (Unity missing) | Whether the item can be grabbed in-experience (common to all types) |
|
||||||
|
|
||||||
|
### Special Notes:
|
||||||
|
The Creator handles image uploads and assigns the storage path to `url`.
|
||||||
|
The `url` value is a Supabase storage path, **not** a full URL — the runtime calls `CreateSignedUrl` to fetch the actual image.
|
||||||
|
|
||||||
|
### Example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"position": { "x": 5, "y": 1, "z": -6 },
|
||||||
|
"rotation": { "x": 0.0, "y": 0.0, "z": 0.0 },
|
||||||
|
"scale": { "x": 1.0, "y": 1.0, "z": 1.0 },
|
||||||
|
"type": "pre-defined",
|
||||||
|
"resourcename": "Billboard",
|
||||||
|
"item-custom-args": [
|
||||||
|
{ "argument": "url", "value": "b83a17ab-92bf-4122-a4d0-7b467a105ae0/Screenshot_Loading.png" }
|
||||||
|
],
|
||||||
|
"item-custom-args-adv": null
|
||||||
|
}
|
||||||
|
```
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
# CCTVCamera
|
||||||
|
|
||||||
|
### Type
|
||||||
|
pre-defined
|
||||||
|
|
||||||
|
### 3D
|
||||||
|
The CCTV Camera is a small, dark gray box.
|
||||||
|
Origin is at the Center.
|
||||||
|
Spawnpoint should be {0,3,0} and its target set so it already points slightly down.
|
||||||
|
|
||||||
|
### Custom Args:
|
||||||
|
| Key | Type | Implemented | Description |
|
||||||
|
|---|---|---|---|
|
||||||
|
| target | string `"x,y,z"` | ⚠️ (Unity only reads rotation) | World-space look-at point. Could be a moveable object in the future.|
|
||||||
|
| fov | float (degrees) | ✔️ | Camera field of view in degrees. Derived in Creator as `zoom * 60`. |
|
||||||
|
| grabable | `"true"` / `"false"` | ⚠️ (Unity missing) | Whether the item can be grabbed in-experience (common to all types) |
|
||||||
|
|
||||||
|
### Special Notes:
|
||||||
|
The `target` arg is documented in the database but the `CCTVCameraBehaviour` switch statement does not handle it — the camera's look direction is controlled by the object's `rotation` in the scene.
|
||||||
|
In the Creator, `fov = zoom * 60` where zoom is 1–10.
|
||||||
|
|
||||||
|
### Example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"position": { "x": 0.0, "y": 3.0, "z": 5.0 },
|
||||||
|
"rotation": { "x": 30.0, "y": 0.0, "z": 0.0 },
|
||||||
|
"scale": { "x": 1.0, "y": 1.0, "z": 1.0 },
|
||||||
|
"type": "pre-defined",
|
||||||
|
"resourcename": "CCTVCamera",
|
||||||
|
"item-custom-args": [
|
||||||
|
{ "argument": "target", "value": "0,0,6" },
|
||||||
|
{ "argument": "fov", "value": "140" }
|
||||||
|
],
|
||||||
|
"item-custom-args-adv": null
|
||||||
|
}
|
||||||
|
```
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
# Cone
|
||||||
|
|
||||||
|
### Type
|
||||||
|
pre-defined
|
||||||
|
|
||||||
|
### 3D
|
||||||
|
The Cone is 1m high with a 0.5m base radius (from Cone.glb mesh).
|
||||||
|
Its Origin is at the Geometric Center.
|
||||||
|
Cone is pointing upwards.
|
||||||
|
Spawnpoint should be {0,0.5,0} so the base rests on the floor.
|
||||||
|
|
||||||
|
### Custom Args:
|
||||||
|
| Key | Type | Implemented | Description |
|
||||||
|
|---|---|---|---|
|
||||||
|
| color | hexColor | ✔️ | Color of the cone material |
|
||||||
|
| grabable | `"true"` / `"false"` | ⚠️ (Unity missing) | Whether the item can be grabbed in-experience (common to all types) |
|
||||||
|
|
||||||
|
### Special Notes:
|
||||||
|
_none_
|
||||||
|
|
||||||
|
### Example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"position": { "x": 4.0, "y": 0.5, "z": 0.0 },
|
||||||
|
"rotation": { "x": 0.0, "y": 0.0, "z": 0.0 },
|
||||||
|
"scale": { "x": 1.0, "y": 1.0, "z": 1.0 },
|
||||||
|
"type": "pre-defined",
|
||||||
|
"resourcename": "Cone",
|
||||||
|
"item-custom-args": [
|
||||||
|
{ "argument": "color", "value": "#ff9900" }
|
||||||
|
],
|
||||||
|
"item-custom-args-adv": null
|
||||||
|
}
|
||||||
|
```
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
# Cube
|
||||||
|
|
||||||
|
### Type
|
||||||
|
pre-defined
|
||||||
|
|
||||||
|
### 3D
|
||||||
|
The Cube is a 1m x 1m x 1m opaque Cube.
|
||||||
|
Its Origin is in the Geometric Center.
|
||||||
|
Spawnpoint should be {0,0.5,0} so its on the floor.
|
||||||
|
|
||||||
|
### Custom Args:
|
||||||
|
| Key | Type | Implemented | Description |
|
||||||
|
|---|---|---|---|
|
||||||
|
| color | hexColor | ✔️ | Color the Material of the Cube uses |
|
||||||
|
|
||||||
|
### Special Notes:
|
||||||
|
The Cube has a collider and is a "Teleportation Area".
|
||||||
|
|
||||||
|
### Example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"position": { "x": 0.0, "y": 0.5, "z": 0.0 },
|
||||||
|
"rotation": { "x": 0.0, "y": 0.0, "z": 0.0 },
|
||||||
|
"scale": { "x": 1.0, "y": 1.0, "z": 1.0 },
|
||||||
|
"type": "pre-defined",
|
||||||
|
"resourcename": "Cube",
|
||||||
|
"item-custom-args": [
|
||||||
|
{
|
||||||
|
"value": "#ff3300",
|
||||||
|
"argument": "color"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"item-custom-args-adv": null
|
||||||
|
}
|
||||||
|
```
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
# Cylinder
|
||||||
|
|
||||||
|
### Type
|
||||||
|
pre-defined
|
||||||
|
|
||||||
|
### 3D
|
||||||
|
The Cylinder is 1m high and has a radius of 0.5m. Its "standing": The round face faces upwards.
|
||||||
|
Its Origin is in the Geometric Center.
|
||||||
|
Spawnpoint should be {0,0.5,0} so its on the floor.
|
||||||
|
|
||||||
|
### Custom Args:
|
||||||
|
| Key | Type | Implemented | Description |
|
||||||
|
|---|---|---|---|
|
||||||
|
| color | hexColor | ✔️ | Color the Material of the Cube uses |
|
||||||
|
|
||||||
|
### Special Notes:
|
||||||
|
The Cylinder has a collider and is a "Teleportation Area".
|
||||||
|
|
||||||
|
### Example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"position": { "x": 2.0, "y": 1, "z": 0.0 },
|
||||||
|
"rotation": { "x": 0.0, "y": 0.0, "z": 0.0 },
|
||||||
|
"scale": { "x": 1.0, "y": 2.0, "z": 1.0 },
|
||||||
|
"type": "pre-defined",
|
||||||
|
"resourcename": "Cylinder",
|
||||||
|
"item-custom-args": [
|
||||||
|
{
|
||||||
|
"value": "#0033ff",
|
||||||
|
"argument": "color"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"item-custom-args-adv": null
|
||||||
|
}
|
||||||
|
```
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
# Directional Light
|
||||||
|
|
||||||
|
### Type
|
||||||
|
|
||||||
|
pre-defined
|
||||||
|
|
||||||
|
### 3D
|
||||||
|
|
||||||
|
No visible mesh. Represents a scene-wide directional light source (like the sun).
|
||||||
|
The `target` arg defines the direction the light points toward.
|
||||||
|
Default spawn height is y=5.
|
||||||
|
|
||||||
|
### Custom Args:
|
||||||
|
|
||||||
|
| Key | Type | Implemented | Description |
|
||||||
|
| --------- | -------------------- | ------------------------------ | ------------------------------------------------------------------- |
|
||||||
|
| color | hexColor | ⚠️ (Creator tbd) | Color of the light |
|
||||||
|
| intensity | float | ✔️ | Light intensity (default 1). |
|
||||||
|
| target | string `"x,y,z"` | ⚠️ (Unity only reads rotation) | World-space look-at point the light aims at |
|
||||||
|
| grabable | `"true"` / `"false"` | ⚠️ | Whether the item can be grabbed in-experience (common to all types) |
|
||||||
|
|
||||||
|
### Special Notes:
|
||||||
|
|
||||||
|
**Key name discrepancy:** The database save format uses `intensity` as the argument key. `LightManupulationBehaviour.cs` read `brightness` and "intensity".
|
||||||
|
|
||||||
|
### Example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"position": { "x": 0.0, "y": 5.0, "z": 0.0 },
|
||||||
|
"rotation": { "x": 0.0, "y": 0.0, "z": 0.0 },
|
||||||
|
"scale": { "x": 1.0, "y": 1.0, "z": 1.0 },
|
||||||
|
"type": "pre-defined",
|
||||||
|
"resourcename": "Directional Light",
|
||||||
|
"item-custom-args": [
|
||||||
|
{ "argument": "color", "value": "#ffffff" },
|
||||||
|
{ "argument": "intensity", "value": "20" },
|
||||||
|
{ "argument": "target", "value": "0,0,0" }
|
||||||
|
],
|
||||||
|
"item-custom-args-adv": null
|
||||||
|
}
|
||||||
|
```
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
# Entrance
|
||||||
|
|
||||||
|
### Type
|
||||||
|
pre-defined
|
||||||
|
|
||||||
|
### 3D
|
||||||
|
An (invisible) Object marking where the player spawns when entering the Room. In the creator is marked with a small disk.
|
||||||
|
|
||||||
|
Default spawn is at y=0.1 to prevent players falling through the floor.
|
||||||
|
|
||||||
|
### Custom Args:
|
||||||
|
| Key | Type | Implemented | Description |
|
||||||
|
|---|---|---|---|
|
||||||
|
| grabable | `"true"` / `"false"` | ⚠️ | Whether the item can be grabbed in-experience (common to all types) |
|
||||||
|
|
||||||
|
### Special Notes:
|
||||||
|
_none_
|
||||||
|
|
||||||
|
### Example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"position": { "x": 0.0, "y": 0.1, "z": 0.0 },
|
||||||
|
"rotation": { "x": 0.0, "y": 0.0, "z": 0.0 },
|
||||||
|
"scale": { "x": 1.0, "y": 1.0, "z": 1.0 },
|
||||||
|
"type": "pre-defined",
|
||||||
|
"resourcename": "Entrance",
|
||||||
|
"item-custom-args": [],
|
||||||
|
"item-custom-args-adv": null
|
||||||
|
}
|
||||||
|
```
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
# Floor
|
||||||
|
|
||||||
|
### Type
|
||||||
|
pre-defined
|
||||||
|
|
||||||
|
### 3D
|
||||||
|
The Floor is a flat plane. Default dimensions are 10m × 10m.
|
||||||
|
Its Origin is at the Center (surface level).
|
||||||
|
Spawnpoint should be {0,0,0}.
|
||||||
|
|
||||||
|
### Custom Args:
|
||||||
|
| Key | Type | Implemented | Description |
|
||||||
|
|---|---|---|---|
|
||||||
|
| color | hexColor | ✔️ | Color of the floor material |
|
||||||
|
| opacity | float (0–1) | ⚠️ (not in Unity) | Transparency of the floor material |
|
||||||
|
| grabable | `"true"` / `"false"` | ⚠️ | Whether the item can be grabbed in-experience (common to all types) |
|
||||||
|
|
||||||
|
### Special Notes:
|
||||||
|
The Floor uses `Plane` as its `resourcename`. The Creator type is `Floor`.
|
||||||
|
Has a collider and is a "Teleportation Area".
|
||||||
|
|
||||||
|
### Example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"position": { "x": 0.0, "y": 0.0, "z": 0.0 },
|
||||||
|
"rotation": { "x": 0.0, "y": 0.0, "z": 0.0 },
|
||||||
|
"scale": { "x": 10, "y": 1, "z": 5.0 },
|
||||||
|
"type": "pre-defined",
|
||||||
|
"resourcename": "Plane",
|
||||||
|
"item-custom-args": [
|
||||||
|
{ "argument": "color", "value": "#cccccc" }
|
||||||
|
],
|
||||||
|
"item-custom-args-adv": null
|
||||||
|
}
|
||||||
|
```
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
# GoToOtherRoom
|
||||||
|
|
||||||
|
### Type
|
||||||
|
pre-defined
|
||||||
|
|
||||||
|
### 3D
|
||||||
|
Unity: Pink 2x2 square in the floor, text hovering 1.5m above.
|
||||||
|
Text is always facing the user.
|
||||||
|
|
||||||
|
### Custom Args:
|
||||||
|
| Key | Type | Implemented | Description |
|
||||||
|
|---|---|---|---|
|
||||||
|
| RoomName | string | ❌ | Display label shown on the entrance |
|
||||||
|
| UUID | string | ❌ | UUID of the target room to teleport to |
|
||||||
|
| color | hexColor | ❌ | Tint color of the entrance mesh, default xrwise pink|
|
||||||
|
| grabable | `"true"` / `"false"` | ⚠️ (not in Unity yet) | Whether the item can be grabbed in-experience (common to all types) |
|
||||||
|
|
||||||
|
### Special Notes:
|
||||||
|
Only the Mesh still exists. Neither Unity nor Creatro implemented yet.
|
||||||
|
|
||||||
|
### Example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"position": { "x": 7.0, "y": 0.1, "z": -2.0 },
|
||||||
|
"rotation": { "x": 0.0, "y": 45.0, "z": 0.0 },
|
||||||
|
"scale": { "x": 1.0, "y": 1.0, "z": 1.0 },
|
||||||
|
"type": "pre-defined",
|
||||||
|
"resourcename": "Entrance",
|
||||||
|
"item-custom-args": [
|
||||||
|
{ "argument": "RoomName", "value": "Demo Room Number 2" },
|
||||||
|
{ "argument": "UUID", "value": "a0a11a08-dc35-49e1-9808-1452b9d31be3" },
|
||||||
|
{ "argument": "color", "value": "#b4da55" }
|
||||||
|
],
|
||||||
|
"item-custom-args-adv": null
|
||||||
|
}
|
||||||
|
```
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
# LiveKitStream
|
||||||
|
|
||||||
|
### Type
|
||||||
|
pre-defined
|
||||||
|
|
||||||
|
### 3D
|
||||||
|
A video display surface that streams live video from a LiveKit room.
|
||||||
|
The LiveKitStream is a 4m x 2,25m opaque Plane.
|
||||||
|
Its Origin is at the Bottom-Center (if controls are disabled).
|
||||||
|
Spawnpoint should be {0,1,0} so its 1m above the floor.
|
||||||
|
|
||||||
|
### Custom Args:
|
||||||
|
| Key | Type | Implemented | Description |
|
||||||
|
|---|---|---|---|
|
||||||
|
| LiveKitRoomID | string | ✔️ | Name of the LiveKit room to connect to (e.g. `"Gas Station"`) |
|
||||||
|
| widthcrop | float | ❌| Horizontal crop |
|
||||||
|
| heightcrop | float | ❌| Vertical crop |
|
||||||
|
| shader | string | ✔️ | `"unlit"` / `"lit"` / `"greenscreen"` |
|
||||||
|
| GreenScreenColor | hexColor |✔️ | Greenscreen key color |
|
||||||
|
| GreenScreenBorderSettings | int(string) | ✔️ | Greenscreen border tolerance. 0 - 1000, default 640 |
|
||||||
|
| GreenScreenColorNear | float (string)| ✔️ | Greenscreen color proximity. 0-2, default 0.3 |
|
||||||
|
| grabable | `"true"` / `"false"` | ⚠️ | Whether the item can be grabbed in-experience (common to all types) |
|
||||||
|
|
||||||
|
### Special Notes:
|
||||||
|
The LiveKit token is fetched via `LiveKitURLProvider.getToken(roomName)`.
|
||||||
|
|
||||||
|
### Example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"position": { "x": 5.0, "y": 1.0, "z": -6.0 },
|
||||||
|
"rotation": { "x": 0.0, "y": 0.0, "z": 0.0 },
|
||||||
|
"scale": { "x": 1.0, "y": 1.0, "z": 1.0 },
|
||||||
|
"type": "pre-defined",
|
||||||
|
"resourcename": "LiveKitStream",
|
||||||
|
"item-custom-args": [
|
||||||
|
{ "argument": "shader", "value": "unlit"},
|
||||||
|
{ "argument": "LiveKitRoomID", "value": "Demo Room" },
|
||||||
|
{ "argument": "widthcrop", "value": "1600" },
|
||||||
|
{ "argument": "heightcrop", "value": "900" }
|
||||||
|
],
|
||||||
|
"item-custom-args-adv": null
|
||||||
|
}
|
||||||
|
```
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
# Point Light
|
||||||
|
|
||||||
|
### Type
|
||||||
|
|
||||||
|
pre-defined
|
||||||
|
|
||||||
|
### 3D
|
||||||
|
|
||||||
|
No visible mesh. Represents an omnidirectional point light source that emits light equally in all directions.
|
||||||
|
Default spawn height is y=2.
|
||||||
|
|
||||||
|
### Custom Args:
|
||||||
|
|
||||||
|
| Key | Type | Implemented | Description |
|
||||||
|
| --------- | -------------------- | ---------------- | ------------------------------------------------------------------- |
|
||||||
|
| color | hexColor | ⚠️ (Creator tbd) | Color of the light |
|
||||||
|
| intensity | float | ✔️ | Light intensity (default 1). |
|
||||||
|
| grabable | `"true"` / `"false"` | ⚠️ | Whether the item can be grabbed in-experience (common to all types) |
|
||||||
|
|
||||||
|
### Special Notes:
|
||||||
|
|
||||||
|
**Key name discrepancy:** The database save format uses `intensity` as the argument key. `LightManupulationBehaviour.cs` read `brightness` and "intensity".
|
||||||
|
|
||||||
|
### Example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"position": { "x": 0.0, "y": 2.0, "z": 0.0 },
|
||||||
|
"rotation": { "x": 0.0, "y": 0.0, "z": 0.0 },
|
||||||
|
"scale": { "x": 1.0, "y": 1.0, "z": 1.0 },
|
||||||
|
"type": "pre-defined",
|
||||||
|
"resourcename": "Point Light",
|
||||||
|
"item-custom-args": [
|
||||||
|
{ "argument": "color", "value": "#ff0000" },
|
||||||
|
{ "argument": "intensity", "value": "50" }
|
||||||
|
],
|
||||||
|
"item-custom-args-adv": null
|
||||||
|
}
|
||||||
|
```
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
# PresentationWall
|
||||||
|
|
||||||
|
A slideshow display surface. Loads a set of JPEG slides from Supabase storage and renders them in sequence.
|
||||||
|
|
||||||
|
❌ Currently not in Creator
|
||||||
|
|
||||||
|
### Type
|
||||||
|
pre-defined
|
||||||
|
|
||||||
|
### 3D
|
||||||
|
|
||||||
|
The PresentationWall is a 4m x 2,25m opaque Plane.
|
||||||
|
When "controls" is set to true it expands to 4m x 2,5m.
|
||||||
|
Its Origin is at the Bottom-Center (if controls are disabled).
|
||||||
|
Spawnpoint should be {0,1,0} so its 1m above the floor.
|
||||||
|
|
||||||
|
### Custom Args:
|
||||||
|
| Key | Type | Implemented | Description |
|
||||||
|
|---|---|---|---|
|
||||||
|
| file | string | ✔️ | UUID of the `Slide` record in the Supabase `slides` table. The runtime fetches `slides_count` and loads each `{storage_folder}/{i}.jpg` |
|
||||||
|
| widthcrop | float | ⚠️ no-op in Unity| Horizontal crop|
|
||||||
|
| heightcrop | float | ⚠️ no-op in Unity| Vertical crop|
|
||||||
|
|controls| bool | ❌ | If Controls are enabled at the bottom of the screen, currently always true|
|
||||||
|
| grabable | `"true"` / `"false"` | ⚠️ | Whether the item can be grabbed in-experience (common to all types) |
|
||||||
|
|
||||||
|
### Special Notes:
|
||||||
|
`file` is not a storage path — it is the `id` field of a `Slide` row in Supabase. The behaviour queries `supabase.From<Slide>().Where(s => s.id == value)` to find the slide folder and count.
|
||||||
|
Signed URLs are generated per slide (1-hour TTL) and loaded as `Texture2D`.
|
||||||
|
|
||||||
|
### Example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"position": { "x": 10.0, "y": 4.0, "z": -6.0 },
|
||||||
|
"rotation": { "x": 0.0, "y": 0.0, "z": 0.0 },
|
||||||
|
"scale": { "x": 1.0, "y": 1.0, "z": 1.0 },
|
||||||
|
"type": "pre-defined",
|
||||||
|
"resourcename": "PresentationWall",
|
||||||
|
"item-custom-args": [
|
||||||
|
{ "argument": "file", "value": "b83a17ab-92bf-4122-a4d0-7b467a105ae0/converted/powerpoint1" },
|
||||||
|
{ "argument": "widthcrop", "value": "0" },
|
||||||
|
{ "argument": "heightcrop", "value": "0" }
|
||||||
|
],
|
||||||
|
"item-custom-args-adv": null
|
||||||
|
}
|
||||||
|
```
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
# Objects
|
||||||
|
|
||||||
|
In this folder every object has a File that includes:
|
||||||
|
- Name of that object.
|
||||||
|
- Type of the Object ("pre-defined" or "user-defined")
|
||||||
|
- Description of 3D representation of that object.
|
||||||
|
- List of custom args, their type, if its implemented (✔️⚠️ ❌), and usage
|
||||||
|
- Special Notes.
|
||||||
|
- One or more example JSON Objects of that object.
|
||||||
|
|
||||||
|
## Example:
|
||||||
|
|
||||||
|
Cube.md
|
||||||
|
```markdown
|
||||||
|
# Cube
|
||||||
|
|
||||||
|
### Type
|
||||||
|
pre-defined
|
||||||
|
|
||||||
|
### 3D
|
||||||
|
The Cube is a 1m x 1m x 1m opaque Cube.
|
||||||
|
Its Origin is in the Geometric Center.
|
||||||
|
Spawnpoint should be {0,0.5,0} so its on the floor.
|
||||||
|
|
||||||
|
### Custom Args:
|
||||||
|
| Key | Type | Implemented | Description |
|
||||||
|
|---|---|---|---|
|
||||||
|
| color | hexColor | ✔️ | Color the Material of the Cube uses |
|
||||||
|
|
||||||
|
### Special Notes:
|
||||||
|
_none_
|
||||||
|
|
||||||
|
### Example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"position": { "x": 0.0, "y": 0.5, "z": 0.0 },
|
||||||
|
"rotation": { "x": 0.0, "y": 0.0, "z": 0.0 },
|
||||||
|
"scale": { "x": 1.0, "y": 1.0, "z": 1.0 },
|
||||||
|
"type": "pre-defined",
|
||||||
|
"resourcename": "Cube",
|
||||||
|
"item-custom-args": [
|
||||||
|
{
|
||||||
|
"value": "#ff3300",
|
||||||
|
"argument": "color"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"item-custom-args-adv": null
|
||||||
|
}
|
||||||
|
```
|
||||||
|
```
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
# Sphere
|
||||||
|
|
||||||
|
### Type
|
||||||
|
pre-defined
|
||||||
|
|
||||||
|
### 3D
|
||||||
|
The Sphere is a 1m diameter sphere (radius 0.5m).
|
||||||
|
Its Origin is in the Geometric Center.
|
||||||
|
Spawnpoint should be {0,0.5,0} so it rests on the floor.
|
||||||
|
|
||||||
|
### Custom Args:
|
||||||
|
| Key | Type | Implemented | Description |
|
||||||
|
|---|---|---|---|
|
||||||
|
| color | hexColor | ✔️ | Color of the sphere material |
|
||||||
|
| grabable | `"true"` / `"false"` | ⚠️ | Whether the item can be grabbed in-experience (common to all types) |
|
||||||
|
|
||||||
|
### Special Notes:
|
||||||
|
The Sphere has a collider and is a "Teleportation Area".
|
||||||
|
|
||||||
|
### Example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"position": { "x": 6.0, "y": 0.5, "z": 0.0 },
|
||||||
|
"rotation": { "x": 0.0, "y": 0.0, "z": 0.0 },
|
||||||
|
"scale": { "x": 1.0, "y": 1.0, "z": 1.0 },
|
||||||
|
"type": "pre-defined",
|
||||||
|
"resourcename": "Sphere",
|
||||||
|
"item-custom-args": [
|
||||||
|
{ "argument": "color", "value": "#ff0000" }
|
||||||
|
],
|
||||||
|
"item-custom-args-adv": null
|
||||||
|
}
|
||||||
|
```
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
# VideoWall
|
||||||
|
|
||||||
|
### Type
|
||||||
|
pre-defined
|
||||||
|
|
||||||
|
### 3D
|
||||||
|
The VideoWall is a 4m x 2,25m opaque Plane.
|
||||||
|
When "controls" is set to true it expands to 4m x 2,5m.
|
||||||
|
Its Origin is at the Bottom-Center (if controls are disabled).
|
||||||
|
Spawnpoint should be {0,1,0} so its 1m above the floor.
|
||||||
|
|
||||||
|
### Custom Args:
|
||||||
|
| Key | Type | Implemented | Description |
|
||||||
|
|---|---|---|---|
|
||||||
|
| file | string | ✔️ | the location in storage (user_files) of the video file |
|
||||||
|
| volume | string | ⚠️ (only Unity) | float between 0 and 1, default 1.|
|
||||||
|
|shader | string | ✔️ | "unlit"(default),"lit","greenscreen"|
|
||||||
|
|controls| bool | ❌ | If Controls are enabled at the bottom of the screen|
|
||||||
|
|autoplay|bool| ⚠️ (only Unity) |if the video automaticly plays when user enters the Room|
|
||||||
|
|
||||||
|
|
||||||
|
### Special Notes:
|
||||||
|
The Creator handles Uploading of Videos, generating Meta-Quest compatible Videos and then assiging the id to the url field.
|
||||||
|
|
||||||
|
### Example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"position": { "x": 0.0, "y": 1.0, "z": -6.0 },
|
||||||
|
"rotation": { "x": 0.0, "y": 0.0, "z": 0.0 },
|
||||||
|
"scale": { "x": 1.0, "y": 1.0, "z": 1.0 },
|
||||||
|
"type": "pre-defined",
|
||||||
|
"resourcename": "Cube",
|
||||||
|
"item-custom-args": [
|
||||||
|
{
|
||||||
|
"value": "b83a17ab-92bf-4122-a4d0-7b467a105ae0/converted/output.webm",
|
||||||
|
"argument": "file"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"item-custom-args-adv": null
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
# Wall
|
||||||
|
|
||||||
|
### Type
|
||||||
|
pre-defined
|
||||||
|
|
||||||
|
### 3D
|
||||||
|
The Wall is a flat rectangular Cube with dimensions 10m × 5m × 0.1m.
|
||||||
|
Its Origin is at the Geometric Center.
|
||||||
|
Spawnpoint should be {0,2.5,0} (half height above floor).
|
||||||
|
|
||||||
|
### Custom Args:
|
||||||
|
| Key | Type | Implemented | Description |
|
||||||
|
|---|---|---|---|
|
||||||
|
| color | hexColor | ✔️ | Color of the wall material |
|
||||||
|
| opacity | float (0–1) | ⚠️ (not in Unity) | Transparency of the wall material |
|
||||||
|
| grabable | `"true"` / `"false"` | ⚠️ | Whether the item can be grabbed in-experience (common to all types) |
|
||||||
|
|
||||||
|
### Special Notes:
|
||||||
|
|
||||||
|
### Example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"position": { "x": 0.0, "y": 2.5, "z": -5.0 },
|
||||||
|
"rotation": { "x": 0.0, "y": 0.0, "z": 0.0 },
|
||||||
|
"scale": { "x": 1.0, "y": 2.0, "z": 1 },
|
||||||
|
"type": "pre-defined",
|
||||||
|
"resourcename": "Wall",
|
||||||
|
"item-custom-args": [
|
||||||
|
{ "argument": "color", "value": "#ffffff" }
|
||||||
|
],
|
||||||
|
"item-custom-args-adv": null
|
||||||
|
}
|
||||||
|
```
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
# WhiteboardWall
|
||||||
|
|
||||||
|
### Type
|
||||||
|
The VideoWall is a 1,8m x 0,9m opaque Plane.
|
||||||
|
Its Origin is at the Bottom-Center.
|
||||||
|
Spawnpoint should be {0,1,0} so its 1m above the floor.
|
||||||
|
|
||||||
|
|
||||||
|
### 3D
|
||||||
|
An interactive whiteboard surface that users can draw on collaboratively.
|
||||||
|
|
||||||
|
### Custom Args:
|
||||||
|
| Key | Type | Implemented | Description |
|
||||||
|
|---|---|---|---|
|
||||||
|
| grabable | `"true"` / `"false"` | ⚠️ | Whether the item can be grabbed in-experience (common to all types) |
|
||||||
|
|
||||||
|
### Special Notes:
|
||||||
|
**Not implemented in save.** The Whiteboard is not serialized to the database JSON by the Creator. It can be placed in the scene but its state will not persist between sessions.
|
||||||
|
|
||||||
|
### Example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"position": { "x": 14.0, "y": 1.0, "z": -6.0 },
|
||||||
|
"rotation": { "x": 0.0, "y": 0.0, "z": 0.0 },
|
||||||
|
"scale": { "x": 1.0, "y": 1.0, "z": 1.0 },
|
||||||
|
"type": "pre-defined",
|
||||||
|
"resourcename": "WhiteboardWall",
|
||||||
|
"item-custom-args": [],
|
||||||
|
"item-custom-args-adv": null
|
||||||
|
}
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user