Hello again. Last lesson established the basic map of Godot’s editor: the Scene dock describes an open scene’s nodes, the Inspector configures the selected node, and the FileSystem stores saved project files. You also saw why pressing Play in an empty project cannot yet launch a game.
Now you will create the project’s first runnable 3D scene. You will assemble a small hierarchy of parent and child nodes, save it as a .tscn scene file, test the current scene, and set it as the project’s main scene. This is the pattern behind every later game object: a player, enemy, weapon, HUD, and arena will all be built from node hierarchies.
A scene is a saved hierarchy of game objects
A node is one object with a particular responsibility. A Camera3D provides the player’s view. A DirectionalLight3D illuminates the world. A MeshInstance3D displays 3D geometry.
A scene is a saved collection of nodes arranged beneath exactly one root node. The root is the top-level organizer for that scene. Child nodes are indented below their parent in the Scene dock.
For today, make a tiny arena-view scene with this structure:
Arena (Node3D)
├── Ground (Node3D)
│ └── Floor (MeshInstance3D)
├── DirectionalLight3D
└── Camera3D
Arena is the root. Ground is a useful grouping node: it contains the Floor visual. The light and camera are direct children of the root because they belong to the overall arena.
A child’s transform is relative to its parent. Thus, if you later move Ground, its Floor moves with it. This is one reason hierarchy is more than organization: it expresses which objects should stay together.

Before building, watch this short setup demonstration. Its scene includes a world environment as well; ours will remain deliberately smaller so you can focus on hierarchy, saving, and running.
Make your first 3D Platformer in Godot 4: Setup, Movement, and Camera Controls
Watch “Make your first 3D Platformer in Godot 4: Setup, Movement, and Camera Controls” by Bramwell. It demonstrates the minimum ingredients of a visible 3D scene: a Node3D root, a camera, lighting, and running the current scene.
Watch the scene setup. Notice that the node selected in the Scene dock determines where a newly created node is placed, and that a Camera3D is necessary for a running 3D scene to show the world.
Build the Arena scene
Start in your Melee Arena project. If the temporary scene from the previous lesson is still open, close it without saving so you begin with no open scene.
1. Create and name the root node
In the Scene dock, click 3D Scene. Godot creates a Node3D root node and opens the 3D workspace.
Rename the root:
- Select
Node3Din the Scene dock. - Press
F2, typeArena, and press Enter.
Node3D is a general-purpose object with a 3D position, rotation, and scale. It does not render anything by itself. Its purpose here is to organize the nodes that make up this scene.
At this point, your Scene dock has one node:
Arena
2. Create a Ground parent and visible Floor child
Select Arena before adding a node. This selection matters: Godot adds new nodes as children of the currently selected node.
- Click the Add Child Node button (
+) in the Scene dock. - Search for
Node3D. - Create it, then rename it
Ground.
You should now see:
Arena
└── Ground
With Ground selected, add a MeshInstance3D node and rename it Floor.
Arena
└── Ground
└── Floor
Floor exists, but it has no mesh assigned yet, so there is nothing visible in the viewport.
With Floor selected:
- In the Inspector, find the Mesh property.
- Click
<empty>. - Choose New PlaneMesh.
- Click the newly created
PlaneMeshresource to expand its settings. - Set its Size to
20on both displayed axes.
A broad square plane should now appear over the editor grid. It is a visual surface only. It will not yet stop a player from falling; collision is a separate system that you will add when constructing the actual playable arena in Module 3.
The hierarchy is intentional:
Groundis the object you would move if you wanted to reposition the complete floor.Flooris the child responsible for rendering the geometry.
This separation will later let one parent coordinate several related children, such as a wall’s mesh and its collision shape.
3. Add a light
Select Arena again, then add a DirectionalLight3D child.
A directional light represents distant illumination, like sunlight. Its position does not matter for the light’s effect; its rotation determines the direction from which it shines.
In the Inspector, open Transform and set the light’s rotation approximately to:
| Axis | Rotation |
|---|---|
| X | degrees |
| Y | degrees |
| Z | degrees |
Exact values are not important today. The goal is simply to direct the light diagonally toward the floor. If you see a darker and lighter side of the plane, the light is working.
Your tree should now be:
Arena
├── Ground
│ └── Floor
└── DirectionalLight3D
4. Add and position a camera
Select Arena once more and add a Camera3D child. This node determines what the running game displays.
Select Camera3D, open Transform in the Inspector, and enter these approximate values:
| Property | X | Y | Z |
|---|---|---|---|
| Position | 0 | 6 | 10 |
| Rotation | degrees | 0 degrees | 0 degrees |
The camera begins above and behind the center of the floor, tilted down toward it. In Godot’s 3D coordinates, the camera normally looks along its local negative Z direction, so the negative X rotation angles it downward.
Your finished scene hierarchy should be:
Arena
├── Ground
│ └── Floor
├── DirectionalLight3D
└── Camera3D
Do a visual inspection in the editor before saving:
Flooris visibly indented beneathGround.Ground,DirectionalLight3D, andCamera3Dare all indented beneathArena.Floorhas aPlaneMeshin its Mesh property.- The camera’s Transform has a height above zero and a negative X rotation.
Confirm what “parent” means
Before saving, test the relationship between Ground and Floor without permanently changing your scene.
- Select
Ground, notFloor. - In the Inspector’s Transform section, change Position X from
0to2. - Observe the viewport: the complete visible floor shifts sideways.
- Press
Ctrl + Zto undo the change.
You moved a Node3D with no visible mesh of its own, but its child mesh moved because children inherit their parent’s placement in the world.
This is the practical rule to carry forward:
Move the parent when you want to move the assembled object; move a child only when you need to adjust that child relative to its parent.
For example, a future player scene will use a CharacterBody3D parent that carries its collision shape, camera, weapon, and health component through the world as one assembled player object.
Save the scene and run it
Save the scene file
A scene does not become part of your project until you save it.
Create a folder to keep the project organized:
- In the FileSystem dock, right-click
res://. - Choose New Folder.
- Name it
scenes.
Then press Ctrl + S to save the open scene. In the save dialog:
- Open the
scenesfolder. - Name the file
arena.tscn. - Click Save.
You should now see this in the FileSystem dock:
res://
├── scenes/
│ └── arena.tscn
└── project.godot
The Scene dock still shows the hierarchy you are editing. The FileSystem dock now shows the saved .tscn file that stores it. These remain different views of your work.
Run the current scene
Press F6, which means Run Current Scene.
Godot should launch a game view showing your lit plane from the camera’s viewpoint. Depending on your editor setup, it may appear in the Game workspace or a separate window.
This result is simple but important:
- The
Camera3Dsupplies an image. - The
Floorsupplies visible geometry. - The
DirectionalLight3Dlights that geometry. - The scene hierarchy supplies the structure Godot loads.
Stop the running scene with F8.
Set the main scene and run the project
F6 runs the scene currently open in the editor. F5 runs the whole project, beginning at the project’s configured main scene.
Now press F5. Because this is the first saved scene in the project, Godot will ask you to choose a main scene. Choose scenes/arena.tscn in the dialog.
Godot records this project-level decision in project.godot. From now on, pressing F5 launches arena.tscn, even if you happen to be editing another scene.
Stop the project with F8 once more.
If the game view is not as expected
Small setup mistakes are normal. Use the Scene dock and Inspector to diagnose them systematically.
| What you see | Likely cause | Check |
|---|---|---|
| Only an empty background | Camera is not aimed at the floor | Select Camera3D; verify Position Y is about 6, Position Z is about 10, and Rotation X is about degrees. |
| No floor in the editor or game | Floor has no mesh resource | Select Floor; in Inspector, ensure Mesh is PlaneMesh, not <empty>. |
| The floor is very small | PlaneMesh retains its default size | Expand the PlaneMesh resource and set Size to 20 by 20. |
F5 asks for a main scene again | The scene was not selected or saved | Confirm that scenes/arena.tscn appears in FileSystem, then select it when prompted. |
| A node appears at the wrong indentation level | The wrong parent was selected when it was added | Check the Scene dock tree. Floor must be a child of Ground; the camera and light must be children of Arena. |
When behavior differs from expectations, do not randomly change settings. First ask: Which node is responsible for this result? Then select that node and inspect its relevant property.
Key takeaways
You have made the project’s first runnable 3D scene. Arena is the root Node3D; it contains a camera and directional light, plus a Ground parent that contains the visible Floor child. The indentation in the Scene dock is meaningful: child nodes belong to, and inherit transforms from, their parents.
You saved that hierarchy as scenes/arena.tscn, tested it with Run Current Scene (F6), and set it as the main scene for Run Project (F5). This distinction will matter as the project grows from one arena scene into many reusable scenes.
Next, you will attach your first GDScript to a node and use its _ready() callback to produce a message in Godot’s Output panel.
Can't find a good explanation? Sign up and we'll make it for you
Sign up