¿Has creado un personaje hermoso que se mueve… pero atraviesa paredes como si fuera Gasparín?

Bienvenido al mundo de las colisiones y la física:
el músculo invisible de todo lo que se siente “real” en tu juego.


🧱 ¿Qué son las colisiones?

Las colisiones hacen que los objetos en el juego interactúen físicamente.
En pocas palabras:

“Esto no puede pasar por aquí, y esto rebota si choca con aquello.”

Sin colisiones = tu personaje se va volando al infinito.
Con colisiones = camina, choca, salta, cae… y se siente natural.


⚙️ ¿Y cómo funciona la física en Godot?

Godot tiene un motor de física integrado y en tiempo real.
Eso quiere decir que puedes hacer cosas como:

  • Saltar y caer con gravedad

  • Rebotar, empujar o deslizarte

  • Detectar cuándo dos cuerpos se tocan

  • Disparar proyectiles que colisionan

Todo esto sin tener que programar desde cero.


🧩 Nodos esenciales para colisiones:

Nodo ¿Para qué sirve?
StaticBody2D Cosas que no se mueven (suelo, paredes)
CharacterBody2D Jugador o enemigo que se mueve
RigidBody2D Cosas que reaccionan a la física (caen, giran)
Area2D Zonas de detección (para recoger, dañar, etc)
CollisionShape2D La forma física del objeto (rectángulo, círculo, etc.)

🛠️ Ejemplo: personaje que choca y camina

extends CharacterBody2D

const SPEED = 200

const JUMP_FORCE = -400

const GRAVITY = 900

func _physics_process(delta):

velocity.y += GRAVITY * delta

if Input.is_action_pressed(“ui_right”):

velocity.x = SPEED

elif Input.is_action_pressed(“ui_left”):

velocity.x = -SPEED

else:

velocity.x = 0

if Input.is_action_just_pressed(“ui_up”) and is_on_floor():

velocity.y = JUMP_FORCE

move_and_slide()

➡️ Este código hace que el personaje corra, salte y choque correctamente con las plataformas.


🧪 Errores comunes

❌ Usar nodos sin CollisionShape2D
❌ Poner la colisión muy grande o mal alineada
❌ Olvidar llamar move_and_slide() o move_and_collide()
❌ No activar monitoring o collision_layer en Area2D