Quick answer: Preload spawnable scenes before connecting peers. Or use spawn_function for explicit control.

Server spawns Player. Client connects, scene preload still in progress, spawn fails silently. Race between connect and preload.

The Fix

# Bootstrap
var spawn_scene = preload("res://player.tscn")
$Spawner.spawnable_scenes.append(spawn_scene.resource_path)

# Or spawn_function callback (explicit)
$Spawner.spawn_function = func(data):
    var p = preload("res://player.tscn").instantiate()
    p.peer_id = data.peer_id
    return p

# Then start server
multiplayer.create_server(7777)

Preload guarantees scenes are in cache when peers connect. spawn_function callbacks let you customize per-spawn logic deterministically.

Verifying

Connect client. Spawner instantiates immediately on both sides. Without preload: timing-dependent failure.

“Preload before connect. Spawn deterministic.”

Related Issues

For RPC silent, see RPC silent. For multiplayer sync, see sync.

Preload. Spawn deterministic.