Basic · Make the project
30 minYou are building: an empty project that is already shaped correctly — named folders, the Forward+ renderer, and an input map with every action the game will ever ask for.
1 · Create the project
- Open Godot 4.4 and click New in the Project Manager.
- Name it
3d-multiplayer-rpg. Choose an empty folder. - Renderer: Forward+. It is the desktop renderer and gives you the lighting this game uses.
- Click Create & Edit.
2 · Build the folders
In the FileSystem dock, right-click res:// → New Folder and make each of these. Sub-folders go inside their parent.
res://
scenes/
player/
maps/
ui/
scripts/
autoload/
player/
maps/
ui/
resources/
characters/
models/Lower-case folder names, always
Scenes/ and scenes/ are the same folder on Windows and different folders on Linux. Pick lower-case now and a path will never break when you share the project.
3 · Add the input actions
Go to Project → Project Settings → Input Map. Type each name into the box and press Add, then click the + beside the action to bind a key.
Bind two keys to one action wherever it helps — the arrow keys sit alongside WASD on the same four actions, so both work.
attack does nothing yet. It is here because adding an action later means editing a settings file everyone has to merge. Add it once, now.
4 · Check the names
Your code will ask for these by exact string, like this — a typo does not error, it simply never fires:
var input_dir := Input.get_vector(
"move_left", "move_right", "move_forward", "move_back")5 · Save and commit
- Press Ctrl+S, then close Project Settings.
- If you use Git:
git init, then commit everything except the.godot/folder.
Done when: the project opens with eleven empty folders, the Input Map lists all eight actions, and pressing F5 asks you to choose a main scene (there isn't one yet — that is lesson 3).
Challenge 1 · A second way to play 🟢 Easy
8 minNot everyone uses WASD. Add a second binding to four actions so a game controller works too.
jump— also the controller's bottom face button.sprint— also a shoulder button.move_forwardandmove_back— also the left stick's up and down.
No controller to hand? Bind the keypad keys instead: 8, 2, 4, 6.
Done when: four actions show two bindings each in the Input Map.
Challenge 2 · Read the settings file 🟡 Medium
10 minEverything you clicked was written to a plain text file. Open project.godot in a text editor — not in Godot.
- Find the
[input]section. Copy the block for one action into your notes. - Find where the renderer is recorded. Write down the line.
- In one sentence: why is it useful that this is text rather than a database?
Do not edit it while Godot is open
Godot rewrites project.godot when it closes, and your edit disappears. Read it now; edit it only with the editor shut.
Done when: you can point to the exact lines that your clicking produced.
Challenge 3 · Prove an action fires 🟠 Harder
12 minYou cannot run the game yet, but you can test the input map on its own.
- Make a new scene with a
Noderoot. Save it asres://scenes/input_test.tscn. - Attach a script and write:
extends Node
func _process(_delta: float) -> void:
var dir := Input.get_vector(
"move_left", "move_right", "move_forward", "move_back")
if dir != Vector2.ZERO:
print(dir)
if Input.is_action_just_pressed("jump"):
print("jump")- Press F6 to run just this scene. Press the keys and watch the Output panel.
- Write down what
dirprints when you hold W. It is not what most people guess.
Then answer: why is that number negative, and which way does Godot call “forward”?
Done when: the Output panel prints on every key, and you have written down what W prints and why.
Extra · Make it yours 🔴 Open-ended
no limitChoose any of these. None of them are required.
- Add the actions your own design needs —
interact,open_map,emote. Name them the way the eight above are named, and write one line on what each will do. - Set a project icon: make a 128×128 PNG and point Application → Config → Icon at it.
- Look up Input.is_action_pressed versus is_action_just_pressed in the Godot docs. Write one sentence on when each is right.
- Write a
README.mdin the project root with your game's name and the one-sentence plan from lesson 1.