CharacterBody3D, the Capsule & Collision Layers
The player scene: a 1.8 m capsule, layer 2, and why players do not collide with each other.
Build the foundation of a co-op 3D RPG: a world that loads the same on every machine, characters that are data files rather than code, a first/third-person camera rig that behaves, and real ENet networking — host or join, pick a character, and run around a shared world together. Every lesson is one step of a project that already runs.
Build the foundation of a co-op 3D RPG: a world that loads the same on every machine, characters that are data files rather than code, a first/third-person camera rig that behaves, and real ENet networking — host or join, pick a character, and run around a shared world together. Every lesson is one step of a project that already runs.
What an online multiplayer RPG is, with videos and sites to explore — then the full game plan, and your first character and mob models.
GD-G2-02A clean project, the folder layout every later lesson expects, and the eight input actions the game reads.
GD-G2-03Build main.tscn — World, MapRoot, Players, the MultiplayerSpawner and a CanvasLayer for the UI.
A custom Resource with class_name, export groups, and the one field that travels over the wire.
GD-G2-05An autoload that reads the character folder at runtime — sorted, and safe in an exported build.
GD-G2-06glTF into the project, the Advanced Import dialog, and pointing a character resource at your model.
GD-G2-07model_scale, model_offset, head_height — and the two different reasons a model faces backwards.
The player scene: a 1.8 m capsule, layer 2, and why players do not collide with each other.
top_level = true, placed by hand every frame — the one trick that stops a third-person camera turning your stomach.
One rig, two modes, and hiding your own model as shadows-only so you still cast a shadow.
Input.get_vector, a yaw basis, acceleration, gravity and move_and_slide.
An animation state enum, a defensive name lookup, and why a wrong clip name must never crash.
Containers, scene-unique % names, and a screen that raises signals instead of knowing about networking.
A SubViewport per card with own_world_3d, its own light, and a pivot that spins the chosen character faster.
Finding the local player by group, a crosshair, and the Esc/click pair that captures and releases the mouse.
An autoload that owns the peer and the roster, knows nothing about the 3D world, and only emits signals.
@rpc("any_peer") versus @rpc("authority"), validating everything a client sends, and the order that must not change.
One spawn function that runs on every peer, deterministic node names, and plain data only.
Who simulates whom, what the synchronizer replicates, and chasing a target instead of snapping to it.
Multi-run, the quick-connect command-line flags, and a headless server you can read like a log.
LAN addresses, UDP 7777, the firewall prompt, and what to do instead of touching the router.
Seeded generation versus a hand-built scene, three ways to build geometry, and the one-method map contract.
A MapData resource, carrying the choice in the handshake, and making the client wait for it.
Two players, your own characters, your own map — recorded, written up and shown.