World Objects¶
Build moving, interactive worlds by dropping SocialScape components onto GameObjects — no scripting and no physics setup required. Each one is configured in the Inspector; the runtime wires up the behaviour and the networking when your world loads. Riders stay in sync automatically.
Moving platforms¶
Add SSPlatform (Social Scape/Platform (Ridable)) to any solid object — an airship, boat, elevator, lift — and players who stand on it ride along in sync, with no drift or lag. The runtime gives the platform the physics body it needs; you don't add a Rigidbody.
There are two ways to move it, and you pick one:
Choose a Drive Mode:
- Nodes (default) — fill in Path Nodes: drop empty GameObjects along the route, drag them into the list in order, and set Move Speed (m/s) and Path Mode (
Loop= circuits ·PingPong= lifts/ferries ·Once= stop at the end). - Tween — follow an SSTween in Path mode on the same object, so you get curved and closed-loop routes authored with the tween's scene handles.
- Animation — drive it with your own Animator/mover; list that mover under Server-Only Components so it runs only on the authority and never fights the sync.
- Script — not available yet (it needs server-authoritative script execution); use Nodes / Tween / Animation for now.
| Field | What it does |
|---|---|
driveMode |
Nodes (default) / Tween / Animation / Script — see above. |
motion |
Standard (smooth, most platforms) or Fast (adds prediction + a higher update rate for very fast/warping platforms). |
syncRotation |
Sync rotation too — leave on for platforms that turn or bank. |
pathNodes |
Waypoints for the Nodes path (in order). |
moveSpeed |
Travel speed along the path, in metres/second. |
pathMode |
Loop / PingPong / Once. |
pauseAtNodes |
Seconds to pause at each waypoint. |
faceMoveDirection |
Rotate the platform to face the way it's travelling (boats, airships). |
serverOnlyComponents |
Your own mover / Animator behaviours — the runtime disables them on non-owner clients so they don't fight the sync (used by Animation and Script modes). |
Place the platform at its first waypoint
The path starts at node 0, so author the platform sitting at (or next to) the first waypoint to avoid an initial jump.
Stations (seats & vehicle cockpits)¶
Add SSStation (Social Scape/Station (Seat)) where a player should sit — a chair, a passenger seat, or a vehicle cockpit. A seated player snaps to the seat, rides it in sync, and their movement is locked. A driver seat also turns the player's movement input into vehicle controls so they can steer.
| Field | What it does |
|---|---|
seatAnchor |
Where the player sits (position + facing). Defaults to this object's transform. |
isDriver |
Driver seat — locks movement and routes the player's input to the vehicle (throttle/steer). Passenger seats leave this off. |
lockMovement |
Lock the occupant's movement while seated (on by default). |
seatedOverride |
An optional animation clip to play while seated. Leave empty for the default seated pose. The player's own animations are restored automatically on exit. |
lookMode |
Free Look = the mouse looks around, first‑person (cars, boats, passengers); Vehicle Control = the mouse flies the craft (pitch/yaw) and the view follows it; Free Look + hold RMB to steer = look around freely, hold right‑mouse to steer with the mouse (the natural way to fly — the basic controller's default for aircraft). Passenger seats are always Free Look. |
freeLookYawLimit / freeLookPitchLimit |
How far you can look left/right and up/down from forward, in degrees (yaw 0 = unlimited) — so a cockpit lets you glance around but not through your seat. |
holdToExit |
Require holding the exit input (not a tap) to leave — avoids accidental exits while driving. |
holdSeconds |
How long to hold the exit input when Hold To Exit is on; default 0.4 s. |
lockExit |
Locked seat: the built-in exit is disabled, so a player can only be stood up by your logic — an Exit Seat action, a Station.Exit() script call, or a World Trigger. Default off. |
mouseSteerFullDeflection |
(Free-Look-steer mode) drag distance for a full turn, as a fraction of screen height. Default 0.35. |
onOccupied / onReleased |
UnityEvents fired when a player sits / stands (open a canopy, start an engine). |
Sitting down. The easiest way is a World Trigger On interact entry on the seat object — the player looks at it, it highlights, and a click / E / VR trigger sits them. (You can also sit a player from a NexusScript.) Exiting is built in: tap F (desktop) or the B/Y button (VR) — unless the seat has Lock Exit on, in which case you release the player yourself with an Exit Seat action, a Station.Exit() call, or a World Trigger.
Driving a vehicle. Put the SSStation on (or under) your SSPlatform vehicle and turn on isDriver. While driving, the player's WASD / left‑stick become the throttle & steer axes (aircraft add mouse / right‑stick pitch/yaw, Q/E roll, Space/Ctrl lift), and Shift/Space become boost/brake. In VR those map to the controllers (lift = A/X, roll = stick‑click, boost/brake = grips, fire = triggers) — see the full VR control map. To move it: drop on SSVehicleController (pick Car or Aircraft) for instant movement with no script, or read the input yourself with the Station.* API for full control — or feed the no‑code variables (set Driver input → no‑code's vehicleVariables to a trigger object and use its throttle/steer variables). For any other control — a horn, lights, a weapon — add a World Trigger On key entry bound to whatever key you like.
Seated animation. By default a seated player plays the built‑in sitting pose. To use your own, drop a clip into seatedOverride. When they stand — or if the seat is ever removed — their normal animation set comes right back.
Gravity zones (walkable ships, wall-walking, zero-G)¶
Experimental
Gravity zones, safe zones and the SSGravityBody marker are experimental and still being tuned — behaviour (especially body‑to‑body transitions) can change between SDK releases, and multi‑body setups need testing in the editor. The single‑body modes (Direction, Ship, one Radial planet, Surface, Weightless) are the most solid; transitions between separate bodies are the newest part. Build with them, but expect rough edges — and use the Gravity Zone Overlay (below) to check your setup.
Add SSGravityZone (Social Scape/Gravity Zone) to an object with a trigger Collider covering an area. While a player is inside, their "up" becomes the zone's up — so gravity, walking, and jumping all happen relative to the zone instead of the world. Five modes:
- Ship — the up follows a moving body and the player rides it. Put the zone (a trigger volume) inside your
SSPlatformship's interior; players walk the decks while still jumping and walking freely, staying planted on the floor as the ship rolls, banks, or flies upside down — jumps curve back to the deck in any orientation. This is how you make a walkable ship. (LeaveframeReferenceempty to use the ship the zone is a child of; point it at a transform whose green (up) axis matches your deck if the ship root's up doesn't.) - Radial — gravity points at a center, so players can walk all the way around a round body, and jumps arc back correctly. Point shape = a round planet/moon (up = away from the core); Axis shape = a ring/cylinder world (gravity relative to the center's up axis — you stand on the inside, so use Toward). Put a big trigger around it and set
center. If it moves/orbits/spins (make it anSSPlatform), the field follows and the surface stays walkable. Fly between several planets and each one's gravity takes over as you approach. - Surface — the up is the floor normal directly under you, so you follow arbitrary lumpy terrain, overhangs, or a ring interior exactly. Set
surfaceMaskto your world/terrain layer. (Undefined when there's no floor below, so the last normal is held mid‑jump — best for shapes that aren't clean spheres; for a round planet, Radial is better.) - Direction — a fixed up. Wall-walking, ceiling rooms, spinning stations, or low-gravity rooms (set
gravityScalebelow 1 — moon-like, floatier jumps). - Weightless — zero-G free float. No "up": the player pitches, yaws, and rolls freely and thrusts in any direction with drift — space stations, EVA, weightless interiors. (Give it a
frameReferenceto float with a moving ship.)
Leaving a zone smoothly restores world gravity (a quick swing over reorientSmoothing, never an instant snap). Zones may overlap or nest to any depth — highest priority always wins. Among equal‑priority zones:
- Two overlapping planets (both Radial) hand you to whichever centre you're nearest, so you transition as you move closer to another.
- Any other pair of bodies (a planet and a plane, two ships, a deck and a room) hands over by membership: you commit to whichever field you entered most recently — so jumping into another body's zone hands you to it, and its gravity catches you as you arrive (rather than the body you left dragging you back).
- Nested rooms resolve to the innermost one you're inside; step out and you drop back to the enclosing zone.
Two neighbouring planets, a walkable ship, and a 10‑room station all work from the same rules.
| Field | What it does |
|---|---|
mode |
Direction / Ship / Radial (planet/moon/ring) / Surface (floor normal) / Weightless (zero-G free float). |
upDirection / useLocalSpace |
(Direction) which way is "up" (gravity pulls the opposite way); Use Local Space aims it by rotating the zone. (0,1,0) = normal. |
frameReference |
(Ship / Weightless) the body whose deck-up you ride / float with. Empty = the ship/platform this zone is a child of. |
center / radialShape / radialDirection |
(Radial) the body gravity points at; Point (planet) or Axis (ring); Away (outside a planet) or Toward (inside a sphere / spun ring). |
surfaceMask / surfaceMaxDistance / maxSurfaceAngle |
(Surface) which layers count as ground, how far below to look, and how far the floor may tilt from your footing before a hit is ignored (avatars are always skipped; set surfaceMask to your terrain layer to skip props too). |
gravityScale |
Gravity strength: 0 = weightless, 0.16 = moon, 0.38 = Mars, 1 = normal, 2 = heavy. (Ignored in Weightless mode.) |
reorientSmoothing |
Seconds to smoothly swing "up" on enter/leave/cross (softens the camera turn — matters for VR comfort). |
priority |
When zones overlap/nest, the higher one wins. Ties → the nearest centre for two overlapping planets; the field you entered most recently for any other pair of bodies; the innermost zone for nested rooms. |
vrView |
VR only: when the ship rolls, does the player's view roll with it (immersive) or stay level (comfort)? "Player's comfort choice" defers to their VR setting. |
Ships and moving planets need an SSPlatform
For Ship mode (and a moving/orbiting Radial planet) the zone must be inside a networked SSPlatform so the ride syncs to other players and the frame holds while you're airborne. Keep it at uniform scale and model inversion by rotation (never a negative scale). A static planet doesn't need this.
Transitions between separate bodies — and the overlay
To jump cleanly from one body to another and back, let their two fields overlap only in the space between them, and keep a near‑surface region that belongs to each body alone — don't let one field blanket the other, or the return jump can't hand back. Mark each body (SSGravityBody on a planet, SSPlatform on a ship), and put a small safe zone on each walkable surface so walking never flips you — the switch should happen when you jump into the other field.
Turn on Social Scape ▸ Gravity Zone Overlay while you build: it draws each field in its body's colour, hatches the overlap band between bodies, and flags the setups that break the hand‑off (a field with no exclusive region, a missing body marker, or a body with no safe zone).
For a single fixed riding spot (a cockpit or chair) where movement is locked, use a Station instead.
Safe zones (shield a ship from outside gravity)¶
Add SSSafeZone (Social Scape/Safe Zone) to a ship — or to any body — to carve out a volume where outside gravity can't reach. While a player is inside the zone, they're shielded from every gravity zone that isn't part of this body: the ship's own deck gravity and any gravity zones nested under it keep working, while an external field (like a planet's Radial pull the ship is flying past) is ignored — until the player steps or jumps out of the bounds. It's pure geometry: no collider, no scripting.
This is an absolute on/off shield, not a priority contest — a creator can't out-bid it with a big priority number on the outside field. (When two safe zones overlap, priority only decides which safe zone applies.)
A safe zone only works when it sits under a body: a ship's SSPlatform, or — for a static planet or any bare object — an SSGravityBody marker on that body's root, with the gravity zones and the safe zone as children of it. That's how the shield tells your body's own gravity apart from an outside field. A safe zone with no body above it does nothing (and logs a warning telling you to add one), so a forgotten marker can never accidentally drop you to world gravity.
| Field | What it does |
|---|---|
shape |
Box / Sphere / Capsule — the volume that shields players inside it. |
center |
Local offset of the volume from the object's origin. |
size |
(Box) the box dimensions. |
radius |
(Sphere / Capsule) the radius of the volume. |
height |
(Capsule) tip-to-tip length along the object's up (Y). Must be at least 2 x radius. |
priority |
When safe zones overlap, the higher one wins; ties go to the innermost/smallest. |
How to shield a flying ship's interior:
- Put an
SSPlatformon the ship root so the ride syncs (see Moving platforms). - Add a Ship-mode
SSGravityZonecovering the interior so passengers walk the decks. - Add an
SSSafeZonesized to that same interior.
Now when the ship flies through a planet's gravity field, the planet's pull stops at the safe-zone bounds — passengers stay planted on the deck instead of being yanked off toward the planet.
For a planet itself (a fixed body, not a moving platform), mark its root with SSGravityBody instead of SSPlatform, then make its SSGravityZone and an SSSafeZone children of it. Inside the safe zone the planet keeps its own gravity while an overlapping ship's or neighbouring planet's field is ignored. Sizing the safe zone is your transition knob — small (hugging the surface) so a jump pops you out and lets the body you jump into take over; large to keep players firmly committed to this body over a wider area.
Static planets today
Safe zones are built for a ship flying past a static planet. A moving or orbiting networked planet is a planned follow-up.
Jump pads¶
Add SSJumpPad (Social Scape/Jump Pad) to an object with a trigger Collider. Walk in, get launched. Bounce pads, launchers, updrafts, boost rings.
| Field | What it does |
|---|---|
direction |
Launch direction. (0,1,0) is straight up. |
useLocalSpace |
Aim the direction relative to the pad (rotate the pad to aim it). |
power |
Launch strength (velocity added), in m/s. |
Teleporters¶
Add SSTeleporter (Social Scape/Teleporter) to an object with a trigger Collider and drag a Destination transform. Walk in, arrive there. Portals, doors, fall-through respawns, level warps.
| Field | What it does |
|---|---|
destination |
Where the player arrives (place an empty GameObject and drag it here). |
applyDestinationRotation |
Also face the player the way the destination faces. |
keepMomentum |
Keep the player's speed through the teleport. Off (default) arrives stationary. |
Destructible objects (SSHealth)¶
Add SSHealth (Social Scape/Health) to any dynamic object — a barrel, a crate, a destructible prop, a vehicle — to give it server-authoritative health and a creator-authored On Death / On Damage response (Animator triggers, spawns, toggles, destroy, audio — the same actions as a World Trigger). Full setup, the response actions, and how damage is dealt live on the Health & Combat page.
How riding stays in sync¶
You don't configure any of this — but for context: a player standing on a platform syncs their position relative to the platform, not in world space, so there's no drift or lag as the platform moves. Jump pads and teleporters are purely local effects on whoever steps in; the resulting movement replicates like any other player motion. A gravity zone reorients you locally too (that replicates the same way); a Ship-mode zone additionally rides the platform's networked frame — set up automatically by SSPlatform — so the ride stays glued for everyone even as the ship rolls. Either way there's no extra networking to set up.
Networking is automatic — you don't manage IDs¶
Networked objects (platforms, and anything else that syncs across players) each need an identifier so every player's game agrees on which object is which. This is handled for you — you never type or manage one:
- Components like
SSPlatformare wired up with the right identifier automatically when your world loads. - If you copy and paste an object, the duplicate is automatically given its own fresh identifier, so the two never clash.
- When you build your world for upload, an automatic check catches the rare problems (a missing or duplicated identifier) and tells you in plain language before the upload goes out — so there's nothing to memorise.
Sync a plain object's position — Network Transform
To make a non-player object's position + rotation replicate to everyone (a rotating windmill, a swinging sign) without
making it a full platform, add Network Transform (Social Scape/Network Transform). It's the generic sync building
block underneath SSPlatform — drop it on and it syncs position + rotation with sensible defaults (there are no
settings to configure).
Don't nest networked objects inside each other (for now)
Avoid making one moving/networked object a child of another moving/networked object — for example a synced prop parented under a platform. That isn't supported yet and the world build will flag it. Keep each networked object on its own (place props beside the platform, not parented under it). Static, non-networked decoration can be parented freely. (Support for nesting — including stacking and carrying objects — is planned.)
Quick reference¶
| Component | Add to | Needs a trigger collider | Drives |
|---|---|---|---|
SSPlatform |
The moving object | No | A ridable moving platform (built-in path or your script) |
SSStation |
Anywhere (a chair, or on/under a vehicle) | Yes (to sit via On interact) | A seat / vehicle cockpit — ride locked, drivers steer |
SSVehicleController |
On the vehicle body | No | Basic car / aircraft movement driven by a SSStation seat — no script needed |
SSGravityZone |
A zone (Ship mode: a child of the platform) | Yes | Reorients gravity while inside — walkable rolling/inverted ship decks (Ship), or wall/ceiling/zero-G rooms (Direction) |
SSGravityBody |
A planet/ship root | No | Marks a gravity body so its zones + safe zone group together (a ship's SSPlatform already counts) |
SSSafeZone |
Under a body (SSGravityBody / SSPlatform) |
No | Shields players inside from every gravity zone not part of this body (inert with no body) |
SSJumpPad |
A zone object | Yes | Launches whoever enters |
SSTeleporter |
A zone object | Yes | Moves whoever enters to a destination |
SSHealth |
Any dynamic object | No | Server-authoritative health + a creator-authored On Death / On Damage response |
SSNetworkTransform |
Any non-player object | No | Replicate position + rotation to everyone (the generic sync block; drop-on, no settings) |
Next¶
- Grabbable props, levers and buttons (with events) → Interactables
- Destructible objects, player health and respawns → Health & Combat
- Reflective mirrors → Mirrors
- Video screens and spatial audio → Video players
- World setup and the descriptor → Worlds
- Script your own platform movers and interactions → NexusScript