Testing your world¶
The SDK ships a first‑person test player so you can walk your world in Play mode and fire your triggers, interactables, UI and NexusScript logic — without uploading. It is built to one rule:
The parity rule
What works offline works in game, and what dies offline would have died in game. The test player runs the same event paths, the same input wiring, the same carry numbers, and — at Play start — the same world sanitization the platform runs when your world loads. When offline and live disagree, that's a platform bug; report it rather than working around it.
Quick start¶
- Open your world scene.
- Social Scape ▸ SDK ▸ Create Test Player (FPS) — adds the capsule player and the world tester.
- Make sure your scene has a floor with a collider, and press Play.
Controls: WASD move · mouse look · Space jump · Left Shift sprint · hold Alt frees the cursor
(same as the live game — click UI precisely, drag natively; release re‑locks) · E / left‑click = use ·
right‑click = grab / drop · scroll = carry distance (0.35 – 4 m) · middle‑mouse = rotate carried · F =
leave a seat.
What the tester does at Play start (expected, not bugs)¶
- Live‑parity sanitization (toggle on the SDK World Tester, default on): screen‑space Canvases and
UIDocuments are disabled, extra EventSystems trimmed, disallowed components stripped — each with a
[SDK Test] live-parity sanitize:log line. That is exactly what happens at world load in game. UI your scripts create at runtime is exempt, offline and live. - Your EventSystem is deactivated. The tester enforces its own, configured exactly like the live client's. If you see your EventSystem go inactive in Play mode, that is the tester working, not breaking. Don't add input modules to fight it — the live game replaces your EventSystem the same way.
UI — both stacks, tested for real¶
World‑space uGUI (Canvas) and UI Toolkit (UIDocument + World Space PanelSettings) both work from the reticle: click, hover, slider drag, wheel scroll and text entry. Hold Alt for precise free‑cursor clicking.
- Watch the console for
[SDK Test] UI Toolkit — …: one line naming your world‑panel count and the pointer camera. When a panel can't receive input, this line names the missing piece (no World Space PanelSettings input config, no MainCamera, a Keep‑mode panel with no collider…). Read it before debugging. - Typing is safe: while any text field (uGUI, TMP or UI Toolkit) has focus, movement freezes,
Edoesn't fire Use, andOnKeyDowntriggers hold their fire — exactly as in game. - Full UI authoring guidance (both stacks, VR limits, world‑space rules): UI.
What fires offline, and what is live‑only¶
Everything local fires: triggers (zones, timers, keys, interact), interactable events and reserved
script callbacks, stations, gravity zones, respawns, conditions/actions/variables, world UI, look‑at tooltips
(with the real resolved input). What does not fire offline is anything that only exists in multiplayer:
Player.* reads of other players, [Synced] replication, RPCs, voice, avatars, ownership transfer — the
local half of a networked event still runs; you just won't see the relay.
Testing in VR¶
Install XR Interaction Toolkit 3.x, build the rig once (Social Scape ▸ Interaction Kit ▸ Test Player ▸ Build VR Rig Prefab), enable VR mode on the test player, and press Play with a headset connected.
The controller ray does what it does in game: uGUI buttons/sliders/toggles click and drag, the thumbstick scrolls uGUI lists, UI Toolkit panels click, hover and drag, and grab/use fire the same events and callbacks as desktop — both testers share one event path.
VR limits (tester AND live — design around them)
No wheel‑scroll on a UI Toolkit ScrollView from the ray (give lists drag room or buttons) · no
double‑click · primary button only. Text entry is a desktop‑tester job — the offline rig has no
keyboard; in game, VR players get the platform keyboard for both stacks.
When something doesn't fire¶
- Read the
[SDK Test]log lines first — sanitization and UI diagnostics name most causes outright. - Reserved callbacks are exact names:
OnUsed(),OnGrabbed(),OnDropped()— a method namedOnUse()never fires. See Interactables API. - A Press interactable needs a collider; a world uGUI Button needs none. See Interactables.
- Still stuck? The gotchas page lists every known sharp edge.