Transmission #069: Two-phone world sync scene wiring
The server-side world WebSocket and integration test were ready, but Unity still never opened /world or spawned remote proxies. SampleScene is wired for the outdoor two-phone demo.
HelerionServer (SampleScene) now carries HelerionWorldSession, HelerionWorldCoordinator, and RemoteEntityRegistry alongside the existing character and achievement sessions. When CharacterSession.SessionReady goes true, the world socket connects and presence runs at ~30 Hz.
New prefabs under Assets/Helerion/World/:
RemotePlayerProxy— stylized human variant withRemoteEntityView+ meleeCapsuleCollider(not tagged Player).RemoteMobProxy— goblin creature variant with the same proxy components.
RemoteEntityRegistry logs when it spawns a remote entity and warns if prefab slots are empty. HelerionWorldSession logs character id and WS URL on connect for field debugging.
Before the phone test: publish and reload the Java server image so production runs Flyway V5 and the world simulation. Each phone needs its own hero (helerion_character_id), location permission, and both players within ~250 m outdoors.
GPS anchor + joystick presence
World reportPresence no longer sends raw device GPS every tick (which ignored on-screen movement). MapChunkCoordinator still sets map origin from the first GPS fix; HelerionGeoPresence converts the hero’s world XZ (joystick/WASD offset from that origin) back to WGS84 via TryWorldToLatLon / MapCoordinateHelper.TileContinuousToLatLon. Raw GPS is only a bootstrap fallback before the map origin is ready.
Unity meta GUID fix
Hand-authored .meta files for Assets/Helerion/World/ prefabs and world scripts used 31- or 33-character GUIDs (Unity requires exactly 32 hex digits), which broke prefab references in SampleScene (Broken text PPtr). Replaced with valid GUIDs and updated scene script/prefab links.
Remote proxy prefabs (runtime fix)
The YAML-only RemotePlayerProxy / RemoteMobProxy variants never imported as loadable prefabs, so RemoteEntityRegistry saw null slots at runtime (No remote prefab assigned). SampleScene now references the existing HumanMale_Character_Free and goblin Creature prefabs directly; broken variant assets removed. RemoteEntityRegistry falls back to GoblinRoadSpawner mob prefabs when slots are empty, adds RemoteEntityView + capsule collider on spawn, and disables local PlayerController on proxies.
Post two-phone pass: smoothness, combat, load time
Remote players were choppy at 30 Hz with hard snap positioning; mobs spawned 20 m+ out while server melee range was 2.5 m; world WS opened during chunk load and instantiated heavy proxies immediately.
- Client: 60 Hz presence,
RemoteEntityViewinterpolation, world sync waits for map terrain ready, proxy spawns staggered (2/frame), larger hit capsules onRemoteEntityView - Server: sim tick 60 Hz, player melee 6 m, mobs spawn 6–55 m, chase detection 30 m, stale MOB rows cleared on sim startup (players persist)
- Deploy: rebuild Unity +
publish-server.sh/ reload so production picks up server defaults