Import a model
Each model downloads as a ZIP with the same prop in glb/, fbx/ and obj/ folders. Godot 4 reads GLB natively, so that is the one to use.
- Unzip the download and copy the
.glbfrom itsglb/folder into your project, for exampleres://models/. Godot imports it as a scene straight away. - Drag it from the FileSystem dock into a 3D scene, or right-click it and choose New Inherited Scene to get an editable copy.
- The prop arrives as one MeshInstance3D with one StandardMaterial3D that samples the kit’s palette texture. Flat shading is baked into the mesh.
- 1 unit = 1 metre, +Y up, the same as Godot, so no scaling is needed.
- Base at the origin. The lowest point sits on y = 0, so a prop placed at y = 0 stands on the floor.
Add collision in the import dock
- Double-click the
.glbin the FileSystem dock to open Advanced Import Settings. - Select the mesh node in the scene tree on the left. Under Physics, tick Generate and keep Body Type on StaticBody3D for scenery.
- Pick a Shape Type: Box or Single Convex for crates, barrels and signs; Decompose Convex for concave props such as carts; Trimesh for static scenery the player walks on or around.
- Click Reimport. Every instance of the scene now carries its StaticBody3D and CollisionShape3D.
Place props from code
A GLB preloads as a PackedScene that you can instance as often as you need:
extends Node3D
const CRATE := preload("res://models/wooden-crate.glb")
func _ready() -> void:
for i in 5:
var crate := CRATE.instantiate() as Node3D
crate.position = Vector3(i * 0.9, 0.0, 0.0)
crate.rotation.y = randf() * TAU
add_child(crate)
Sounds: WAV for effects, OGG for loops
Copy the files you want from the pack’s wav/ and ogg/ folders. Godot imports .wav as AudioStreamWAV, which is cheap to play and right for short effects you trigger often, and .ogg as AudioStreamOggVorbis, which is smaller and right for long sounds, ambience and music.
- To loop an OGG, select it, tick Loop in the Import dock and click Reimport. For a WAV, set Loop Mode to Forward.
- Sound from a place in the world: use an AudioStreamPlayer3D as a child of the prop instead of an AudioStreamPlayer.
extends Node
var coin_player := AudioStreamPlayer.new()
func _ready() -> void:
coin_player.stream = preload("res://sounds/coin.wav")
add_child(coin_player)
func collect_coin() -> void:
coin_player.play()
We checked these snippets and the collision settings in Godot 4.7.