Recipes
Multiplayer replication rooms and networked motion
Two or more players share a world. Per-entity replication feel is set with
NetworkProfileComponent; the room and matchmaking topology is set once at the game level with the multiplayer blueprint.engine v1.0.234since component-field-contract ecs.component-field-contract.v1, network.v1, action-catalog.v1.0.232Copy for LLM
Use this for
making a game multiplayer; controlling how entities replicate and interpolate; hiding owner-private entities; setting the room and queue blueprint
Not for
single-player only games; save data (see saves-and-persistence); input prediction tuning (see input-mapping-actions-bindings)
Pairs with: Input mapping actions bindings keyboard mouse gamepad touch, Third-person follow camera and platformer jump movement, Saves persistence player progress and data stores
The recipe
- Per-entity replication: attach
NetworkProfileComponent{ "type":"NetworkProfileComponent", "interpolation":"responsive", "interestRadius": 60, "alwaysRelevant": false }.interpolationis:responsive: hugs the newest server sample, no gap-bridging (projectiles, snappy pickups).smooth: doubles the interpolation buffer for fluid slow movers (platforms, doors).default: the tick-derived baseline.
- Visibility controls on the same component:
ownerOnly: truewithholds the entity from every player except its owner;hidden: truewithholds it from everyone;alwaysRelevant: trueandinterestRadiusshape whose snapshot it enters. - Game topology: set the room and queue blueprint with
project_set_multiplayer_blueprint(game.multiplayer_blueprint.set, AI nameset_game_multiplayer_blueprint). The definition carriesroomTemplates(each withkey,joinPolicy,maxPlayers) andqueues(each withkey,mode,minParticipants,maxParticipants,roomTemplateKey). - You do not have to configure anything to be multiplayer: an unconfigured game resolves to a default of one
publicroom (maxPlayers16) plus one open queue, so the runtime never lacks a blueprint.
Pitfalls
NetworkProfileComponentis presentation intent for replicated motion; it does not itself move the entity. It reads into the interpolation buffer (no second mover).- Netcode is client-authoritative single-writer over relays; the server does not re-simulate. Use
server_authoritativeinput prediction (see input-mapping-actions-bindings) for verbs that must resist cheating. ownerOnlywithholds the WHOLE entity from non-owners, not just a field; a first-person viewmodel is a goodownerOnlycandidate.- The blueprint mutation carries the full definition (settings-panel edits send the whole object); send a complete
roomTemplates+queuesshape, not a diff.
Verify
engine_get_component_schemaonNetworkProfileComponentfor theinterpolationenum and the visibility flags.project_get_graph_snapshotand the game record to confirm the blueprint set.simulation_run(qa.run.start) for a multi-participant admission check.