Tools: Ultimate Guide: Cómo hacer tu primer juego en Godot con IA en un fin de semana

Tools: Ultimate Guide: Cómo hacer tu primer juego en Godot con IA en un fin de semana

Día 1 (sábado): Setup y mecánicas base

Instalar Godot

Entender la arquitectura

Dónde usar IA (y dónde no)

Día 1 (tarde): Enemigos y colisiones

Crear enemigos

Detectar colisiones

Día 2 (domingo): UI, sonido y exportación

Interfaz de usuario

Sonido

Exportar

Recursos para seguir Godot Engine tiene 95,000 estrellas en GitHub y es completamente gratis. No hay licencias, no hay royalties, no hay letra chica. Si nunca hiciste un juego pero sabés programar, este es el mejor momento para empezar. Esta guía cubre cómo armar un juego 2D funcional en Godot 4 usando herramientas de IA para acelerar las partes tediosas: generar código boilerplate, debuggear errores, y prototipar mecánicas rápido. Bajá Godot 4.x desde la página oficial. No necesitás instalar nada: es un ejecutable portable. En Linux, macOS y Windows funciona igual. Creá un proyecto nuevo y elegí el renderer Compatibility (OpenGL). Es el más estable para juegos 2D y funciona en la mayor cantidad de hardware. Godot usa un sistema de nodos organizados en un árbol de escenas. Todo es un nodo: tu personaje, los enemigos, el piso, la cámara, la interfaz. Los nodos se combinan en escenas reutilizables. Este script mueve un personaje con las flechas del teclado. En Godot, _physics_process se ejecuta 60 veces por segundo y move_and_slide() maneja las colisiones automáticamente. Herramientas como Ziva, que corren dentro del editor de Godot, son útiles porque entienden la estructura de tu proyecto. También podés usar ChatGPT o Claude pegando código, pero perdés el contexto del proyecto. Según la encuesta GDC 2026, el 47% de los desarrolladores que usan IA la usan para asistencia de código. Solo el 5% la usa para features que el jugador ve directamente. Creá una nueva escena con un nodo Area2D como raíz. Agregá un Sprite2D y un CollisionShape2D. Conectá la señal body_entered del Area2D del enemigo al jugador: Las señales son el sistema de eventos de Godot. Son como callbacks tipados: cuando algo pasa (colisión, timer, animación termina), se emite una señal y los nodos conectados reaccionan. Para mostrar puntaje y vidas, usá nodos Label dentro de un CanvasLayer (se renderiza encima del juego): El decorator @onready asigna la referencia al nodo cuando la escena está lista. Es el equivalente de GetComponent<>() en Unity o FindNode en otros motores. Agregá nodos AudioStreamPlayer a la escena. Godot soporta .ogg y .wav nativamente. Para música de fondo, usá un AudioStreamPlayer en un Autoload (singleton global) para que siga sonando entre escenas. Para compartir tu juego, exportá a Web (HTML5). Es la forma más rápida de que alguien lo pruebe: Tu juego está online en menos de 10 minutos. El punto no es hacer un juego perfecto en un fin de semana. Es hacer uno que funcione, subirlo a itch.io, y tener algo concreto que mostrar. El primer juego siempre es malo, y eso está bien. Templates let you quickly answer FAQs or store snippets for re-use. Hide child comments as well For further actions, you may consider blocking this person and/or reporting abuse

Command

Copy

# Un nodo CharacterBody2D básico extends CharacterBody2D var speed = 200.0 func _physics_process(delta): var direction = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down") velocity = direction * speed move_and_slide() # Un nodo CharacterBody2D básico extends CharacterBody2D var speed = 200.0 func _physics_process(delta): var direction = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down") velocity = direction * speed move_and_slide() # Un nodo CharacterBody2D básico extends CharacterBody2D var speed = 200.0 func _physics_process(delta): var direction = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down") velocity = direction * speed move_and_slide() # enemigo.gd extends Area2D var speed = 100.0 var direction = Vector2.LEFT func _process(delta): position += direction * speed * delta func _on_visible_on_screen_notifier_2d_screen_exited(): queue_free() # Se borra cuando sale de la pantalla # enemigo.gd extends Area2D var speed = 100.0 var direction = Vector2.LEFT func _process(delta): position += direction * speed * delta func _on_visible_on_screen_notifier_2d_screen_exited(): queue_free() # Se borra cuando sale de la pantalla # enemigo.gd extends Area2D var speed = 100.0 var direction = Vector2.LEFT func _process(delta): position += direction * speed * delta func _on_visible_on_screen_notifier_2d_screen_exited(): queue_free() # Se borra cuando sale de la pantalla # En el script del enemigo func _on_body_entered(body): if body.is_in_group("player"): body.take_damage(1) queue_free() # En el script del enemigo func _on_body_entered(body): if body.is_in_group("player"): body.take_damage(1) queue_free() # En el script del enemigo func _on_body_entered(body): if body.is_in_group("player"): body.take_damage(1) queue_free() # hud.gd extends CanvasLayer @onready var score_label = $ScoreLabel @onready var lives_label = $LivesLabel func update_score(value): score_label.text = "Puntaje: %d" % value func update_lives(value): lives_label.text = "Vidas: %d" % value # hud.gd extends CanvasLayer @onready var score_label = $ScoreLabel @onready var lives_label = $LivesLabel func update_score(value): score_label.text = "Puntaje: %d" % value func update_lives(value): lives_label.text = "Vidas: %d" % value # hud.gd extends CanvasLayer @onready var score_label = $ScoreLabel @onready var lives_label = $LivesLabel func update_score(value): score_label.text = "Puntaje: %d" % value func update_lives(value): lives_label.text = "Vidas: %d" % value # Reproducir sonido al recibir daño $HitSound.play() # Reproducir sonido al recibir daño $HitSound.play() # Reproducir sonido al recibir daño $HitSound.play() - Generar scripts boilerplate (movimiento, colisiones, spawners) - Diagnosticar errores de GDScript desde el stack trace - Prototipar mecánicas que no conocés (sistema de inventario, diálogos, pathfinding) - Game design (las decisiones de diseño son tuyas) - Arte final (los modelos generan assets inconsistentes) - Código que no entendés (si no podés leerlo, no podés debuggearlo) - Bajá los export templates desde Editor > Manage Export Templates - Agregá un preset de Web en Project > Export - Exportá a una carpeta - Subí los archivos a itch.io (gratis, sin aprobación) - Documentación oficial de Godot (también disponible en español) - GDQuest en YouTube (tutoriales paso a paso) - r/godot en Reddit (comunidad activa que responde preguntas) - Godot en español (cada vez hay más contenido en español)