Skip to content

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.
  • Scriptnot 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 SSPlatform ship'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. (Leave frameReference empty 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 an SSPlatform), 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 surfaceMask to 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 gravityScale below 1 — moon-like, floatier jumps).
  • Weightlesszero-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 frameReference to 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:

  1. Put an SSPlatform on the ship root so the ride syncs (see Moving platforms).
  2. Add a Ship-mode SSGravityZone covering the interior so passengers walk the decks.
  3. Add an SSSafeZone sized 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 SSPlatform are 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