Parte: 1 — Motores 2D y tu primer juego jugable · Fuente: Documentación de Godot 4 (Nodes and scenes) ⏱️ Duración estimada: 75 min · Nivel: Intermedio
Entender el paradigma central de Godot 4: los nodos como bloques funcionales, las escenas como árboles de nodos reutilizables y el SceneTree como estructura que ejecuta todo el juego en tiempo real. Este modelo mental es la base sobre la que construiremos, clase a clase, un plataformas 2D completo.
Al terminar sabrás por qué en Godot "todo es un nodo", cómo componer escenas dentro de otras escenas y cómo se traduce esto respecto a los GameObject y Prefab de Unity. Dejarás creado el proyecto del curso con una escena Mundo que contiene una escena Jugador reutilizable, lista para crecer.
Al finalizar, el alumno podrá:
escenas/, sprites/).Jugador) y guardarla como archivo .tscn.Jugador dentro de Mundo) y ejecutarla.| # | Tema | Por qué importa |
|---|---|---|
| 1 | Nodo como unidad básica | Es el "ladrillo" con el que se arma todo en Godot. |
| 2 | Tipos de nodos (Node2D, Sprite2D…) | Cada tipo aporta una capacidad distinta. |
| 3 | Escena = árbol de nodos | Permite agrupar y reutilizar comportamiento. |
| 4 | Nodo raíz | Define qué es la escena y cómo se instancia. |
| 5 | Instanciar escenas | La reutilización real: un Jugador en muchos niveles. |
| 6 | SceneTree y nodo raíz del juego | Es el motor de ejecución en vivo. |
| 7 | Composición vs herencia | Filosofía de diseño de Godot frente a otros motores. |
| 8 | Equivalencias con Unity | Transfiere lo que ya sabes a Prefabs/GameObjects. |
.tscn): conjunto de nodos organizados en árbol y guardado en disco. Clave: puede instanciarse muchas veces como si fuera una plantilla.ready..tscn original se propagan a todas las instancias.position, rotation y scale. Clave: casi todo objeto visible 2D hereda de él.Necesitas Godot 4.x instalado (versión estándar, sin C#, salvo que lo prefieras). Descárgalo desde https://godotengine.org/download. No requiere instalación: es un único ejecutable. Abre el Project Manager, que es la ventana desde la que se crean y administran proyectos.
Como marcador visual usaremos por ahora un icono que Godot incluye en todo proyecto nuevo (icon.svg), así no dependemos de descargar assets. Ten a mano la documentación oficial de nodos y escenas: https://docs.godotengine.org/en/stable/getting_started/step_by_step/nodes_and_scenes.html.
Vamos a crear el proyecto del curso y montar Mundo con un Jugador reutilizable dentro.
En el Project Manager, pulsa New Project. Nombre: PlataformasCurso. Elige una carpeta vacía, renderer Compatibility (más ligero) y Create & Edit.
En el panel FileSystem (abajo a la izquierda), haz clic derecho sobre res:// → Create Folder y crea dos carpetas: escenas y sprites.
Crea la escena del jugador. En el panel Scene (arriba izquierda) pulsa + Other Node, busca Node2D y selecciónalo como raíz. Haz doble clic en su nombre y renómbralo a Jugador.
Con Jugador seleccionado, pulsa el + para añadir un hijo Sprite2D. En el Inspector (derecha), en la propiedad Texture, elige Load y selecciona res://icon.svg. Ya tienes un marcador visible.
Guarda la escena con Ctrl+S dentro de escenas/ como jugador.tscn. Acabas de crear una escena reutilizable.
Crea la escena principal. Menú Scene → New Scene. Añade un Node2D como raíz y renómbralo Mundo. Guárdalo como escenas/mundo.tscn.
Instancia al jugador dentro del mundo. Con Mundo seleccionado, pulsa el icono de cadena/eslabón ("Instantiate Child Scene") en la barra del panel Scene, elige jugador.tscn y acepta. Aparecerá Jugador como hijo de Mundo, con un icono distinto que indica que es una instancia.
Mueve la instancia en el viewport hasta el centro para verla bien. Fíjate en el árbol resultante en el panel Scene:
Mundo (Node2D)
└── Jugador (instancia de jugador.tscn)
└── Sprite2D
Mundo, pulsa el icono de Attach Script, ruta escenas/mundo.gd, y escribe:extends Node2D
# _ready() se ejecuta cuando el nodo y todos sus hijos entran al SceneTree.
func _ready() -> void:
print("Mundo listo. Hijos directos: ", get_child_count())
# Recorremos el árbol para inspeccionar su composición.
for hijo in get_children():
print("- ", hijo.name, " (", hijo.get_class(), ")")
mundo.tscn como escena principal: menú Project → Project Settings → Application → Run, campo Main Scene → escenas/mundo.tscn. Ejecuta con F5. Verás el icono del jugador en pantalla y, en el panel Output, el nombre y tipo de los hijos del mundo.Con esto ya tienes composición real: una escena Jugador que podrás instanciar tantas veces como quieras en cualquier nivel.
Jugador dentro de Mundo y colócalo en otra posición. Observa que ambos comparten el mismo .tscn.Sprite2D en jugador.tscn y comprueba cómo afecta a todas las instancias.Jugador y explica por qué el nombre del nodo raíz importa al instanciar.Marker2D al jugador llamado PuntoDisparo y descríbelo como futuro punto de origen de balas.hijo.global_position.Crea una tercera escena Moneda (raíz Node2D con un Sprite2D) e instánciala tres veces dentro de Mundo, en posiciones distintas. Amplía mundo.gd para que al arrancar imprima cuántos hijos son jugadores y cuántos son monedas, distinguiéndolos por su nombre.
Criterio de aceptación: al pulsar F5 se ven en pantalla el jugador y las tres monedas, y el Output muestra el conteo correcto de cada tipo sin errores.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
| Al ejecutar aparece "No main scene has ever been defined" | No configuraste la Main Scene. Ve a Project Settings → Run y asígnala, o pulsa F6 para correr la escena actual. |
| El sprite no se ve en pantalla | La textura está vacía o el nodo está fuera del viewport. Asigna Texture y centra la posición. |
| Editar el jugador no cambia las instancias | Estás editando dentro de mundo.tscn, no en jugador.tscn. Abre el .tscn original para cambios globales. |
| "Attempt to call function on a null instance" | Usaste $Ruta a un nodo inexistente o mal escrito. Verifica el nombre exacto en el panel Scene. |
| Se creó el nodo pero no es el raíz esperado | Elegiste mal el tipo de raíz. Borra y recrea la escena con el tipo correcto. |
❓ ¿Por qué en Godot "todo es un nodo"? Porque cada capacidad (dibujar, sonar, colisionar) se implementa como un tipo de nodo, y al combinarlos por composición armas objetos complejos sin herencia rígida.
❓ ¿Una escena y un nodo son lo mismo? No. Un nodo es una pieza; una escena es un árbol de nodos guardado en disco que puede instanciarse como plantilla reutilizable.
❓ ¿Esto se parece a los Prefabs de Unity? Sí: una escena instanciable equivale a un Prefab, y el nodo raíz cumple el papel del GameObject principal del Prefab.
❓ ¿Qué es exactamente el SceneTree? Es la estructura en memoria que contiene la escena activa mientras el juego corre y reparte los callbacks como _ready y _process.
Clase 025 - Metodología, gestión de proyectos y portfolio del desarrollador
Clase 027 - Godot: interfaz, proyecto y primer sprite en pantalla