Setting up the game area¶
In this first part, we're going to set up the game area. Let's get started by importing the start assets and setting up the game scene.
We've prepared a Godot project with the 3D models and sounds we'll use for this tutorial, linked in the index page. If you haven't done so yet, you can download the archive here: Squash the Creeps assets.
Once you downloaded it, extract the .zip archive on your computer. Open the Godot project manager and click the Import button.
In the import popup, enter the full path to the freshly created directory
squash_the_creeps_start/. You can click the Browse button on the right to
open a file browser and navigate to the
project.godot file the folder
Click Import & Edit to open the project in the editor.
The start project contains an icon and two folders:
There, you will find the art assets and music we'll use in the game.
There are two 3D models,
mob.glb, some materials that
belong to these models, and a music track.
Setting up the playable area¶
We're going to create our main scene with a plain Node as its root. In the Scene dock, click the Add Node button represented by a "+" icon in the top-left and double-click on Node. Name the node "Main". Alternatively, to add a node to the scene, you can press Ctrl + a (or Cmd + a on macOS).
Save the scene as
Main.tscn by pressing Ctrl + s (Cmd + s on macOS).
We'll start by adding a floor that'll prevent the characters from falling. To create static colliders like the floor, walls, or ceilings, you can use StaticBody nodes. They require CollisionShape child nodes to define the collision area. With the Main node selected, add a StaticBody node, then a CollisionShape. Rename the StaticBody as Ground.
A warning sign next to the CollisionShape appears because we haven't defined its shape. If you click the icon, a popup appears to give you more information.
To create a shape, with the CollisionShape selected, head to the Inspector and click the [empty] field next to the Shape property. Create a new Box Shape.
The box shape is perfect for flat ground and walls. Its thickness makes it reliable to block even fast-moving objects.
A box's wireframe appears in the viewport with three orange dots. You can click
and drag these to edit the shape's extents interactively. We can also precisely
set the size in the inspector. Click on the BoxShape to expand the resource.
Set its Extents to
30 on the X axis,
1 for the Y axis, and
the Z axis.
In 3D, translation and size units are in meters. The box's total size is
twice its extents:
60 meters on the ground plane and
units tall. The ground plane is defined by the X and Z axes, while the Y
axis represents the height.
Collision shapes are invisible. We need to add a visual floor that goes along with it. Select the Ground node and add a MeshInstance as its child.
Klicken Sie im Inspector auf das Feld neben Mesh und erstellen Sie eine CubeMesh Ressource, um einen sichtbaren Würfel zu erstellen.
Auch hier ist sie standardmäßig zu klein. Klicken Sie auf das Würfelsymbol, um die Ressource zu erweitern und setzen Sie ihre Size auf
60. Da die Würfelressource mit einer Größe und nicht mit Ausdehnungen arbeitet, müssen wir diese Werte verwenden, damit sie mit unserer Kollisionsform übereinstimmen.
Sie sollten eine breite graue Platte sehen, die das Gitter und die blauen und roten Achsen im Ansichtsfenster abdeckt.
We're going to move the ground down so we can see the floor grid. Select the Ground node, hold the Ctrl key down to turn on grid snapping (Cmd on macOS), and click and drag down on the Y axis. It's the green arrow in the move gizmo.
If you can't see the 3D object manipulator like on the image above, ensure the Select Mode is active in the toolbar above the view.
Move the ground down
1 meter. A label in the bottom-left corner of the
viewport tells you how much you're translating the node.
Moving the Ground node down moves both children along with it. Ensure you move the Ground node, not the MeshInstance or the CollisionShape.
Let's add a directional light so our scene isn't all grey. Select the Main node and add a DirectionalLight as a child of it. We need to move it and rotate it. Move it up by clicking and dragging on the manipulator's green arrow and click and drag on the red arc to rotate it around the X axis, until the ground is lit.
In the Inspector, turn on Shadow -> Enabled by clicking the checkbox.
Zu diesem Zeitpunkt sollte dein Projekt wie folgt aussehen.
That's our starting point. In the next part, we will work on the player scene and base movement.