Física y colisiones en Unity

Configura Rigidbody y Colliders para detectar impactos, aplicar fuerzas y evitar comportamientos físicos inconsistentes.

Rigidbody habilita simulación física en un objeto y permite que fuerzas, gravedad y colisiones se apliquen automáticamente.

Los Colliders definen la forma de contacto físico: sin collider no hay colisión detectada, aunque el objeto sea visible.

Las fuerzas y movimientos físicos deben ejecutarse en FixedUpdate para mantener consistencia entre equipos y FPS.

OnCollisionEnter permite reaccionar a impactos con lógica de gameplay (daño, sonido, puntuación, rebotes).

  • Uno simula dinámica, el otro define volumen de colisión.
  • `Rigidbody` controla cómo se mueve un objeto en el sistema físico: masa, gravedad, drag y respuesta a fuerzas.
  • `Collider` describe la geometría de contacto (box, sphere, capsule, mesh). Sin collider, la física no detecta choque con precisión.
  • Un objeto puede tener collider sin rigidbody (estático), pero para dinámica real y respuesta a fuerzas necesitas rigidbody en al menos una de las partes que colisionan.
  • Collider define volumen de choque.

Rigidbody y Collider: roles distintos

Uno simula dinámica, el otro define volumen de colisión.

`Rigidbody` controla cómo se mueve un objeto en el sistema físico: masa, gravedad, drag y respuesta a fuerzas.

`Collider` describe la geometría de contacto (box, sphere, capsule, mesh). Sin collider, la física no detecta choque con precisión.

Un objeto puede tener collider sin rigidbody (estático), pero para dinámica real y respuesta a fuerzas necesitas rigidbody en al menos una de las partes que colisionan.

  • Collider define volumen de choque.
  • Rigidbody define comportamiento dinámico.
  • Estático vs dinámico afecta rendimiento y simulación.

Aplicar fuerzas sin romper consistencia

La física no debe depender de la tasa de frames del render.

Cuando uses `Rigidbody.AddForce`, hazlo en `FixedUpdate` para alinear cálculos con el paso fijo del motor físico.

Mover físicamente con transform directo puede saltarse colisiones o producir resultados poco naturales; usa APIs de física cuando corresponda.

Para movimiento controlado con rigidbody, combina lectura de input en Update y aplicación de fuerza o velocidad en FixedUpdate.

Responder a colisiones

Detectar impacto es útil solo si lo conectas con feedback y reglas de juego.

`OnCollisionEnter` se dispara al inicio del contacto físico y entrega información del otro objeto (`collision.gameObject`).

Puedes filtrar por tag o capa para evitar ejecutar lógica en colisiones irrelevantes.

Añade feedback claro (sonido, partículas, UI) para que la colisión tenga impacto perceptible y no sea un evento silencioso.

Unity
08

Física y colisiones en Unity

Configura Rigidbody y Colliders para detectar impactos, aplicar fuerzas y evitar comportamientos físicos inconsistentes.

Código del tema: Rigidbody + Collider = fisica de juego

📘 Teoría

Rigidbody y Collider: roles distintos

Uno simula dinámica, el otro define volumen de colisión.

`Rigidbody` controla cómo se mueve un objeto en el sistema físico: masa, gravedad, drag y respuesta a fuerzas.

`Collider` describe la geometría de contacto (box, sphere, capsule, mesh). Sin collider, la física no detecta choque con precisión.

Un objeto puede tener collider sin rigidbody (estático), pero para dinámica real y respuesta a fuerzas necesitas rigidbody en al menos una de las partes que colisionan.

  • Collider define volumen de choque.
  • Rigidbody define comportamiento dinámico.
  • Estático vs dinámico afecta rendimiento y simulación.

Aplicar fuerzas sin romper consistencia

La física no debe depender de la tasa de frames del render.

1

Cuando uses `Rigidbody.AddForce`, hazlo en `FixedUpdate` para alinear cálculos con el paso fijo del motor físico.

2

Mover físicamente con transform directo puede saltarse colisiones o producir resultados poco naturales; usa APIs de física cuando corresponda.

3

Para movimiento controlado con rigidbody, combina lectura de input en Update y aplicación de fuerza o velocidad en FixedUpdate.

Empuje con AddForce en FixedUpdate
using UnityEngine;

public class BallController : MonoBehaviour
{
    public float force = 10f;
    private Rigidbody rb;
    private float inputX;

    void Awake()
    {
        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        inputX = Input.GetAxis("Horizontal");
    }

    void FixedUpdate()
    {
        rb.AddForce(new Vector3(inputX * force, 0f, 0f));
    }
}

Responder a colisiones

Detectar impacto es útil solo si lo conectas con feedback y reglas de juego.

1

`OnCollisionEnter` se dispara al inicio del contacto físico y entrega información del otro objeto (`collision.gameObject`).

2

Puedes filtrar por tag o capa para evitar ejecutar lógica en colisiones irrelevantes.

3

Añade feedback claro (sonido, partículas, UI) para que la colisión tenga impacto perceptible y no sea un evento silencioso.

Detección básica de colisión
using UnityEngine;

public class HitLogger : MonoBehaviour
{
    void OnCollisionEnter(Collision collision)
    {
        Debug.Log($"Colisión con: {collision.gameObject.name}");
    }
}

🧪 Aprende probando

Ejemplo Ejemplo guiado Diseña el setup mínimo de una pelota que cae y detecta choque con el suelo.

🏁 Retos

Reto Reto práctico Crea una lógica de empuje horizontal por input y loguea cada colisión significativa.

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros 😉.

Esta la hice en febrero de 2026 para facilitar el aprendizaje de mis alumnxs. Aprender desarrollo web practicando. La idea es que crezca semanalmente con nuevos temas, tests y retos.

Inspirado en MDN, en W3Schools, en Codepen, en el crack de Manz y en mil sitios de documentación sobre desarrollo web. Quería aportar además de bloques teóricos con ejemplos, la gamificación de los retos y el sistema de test que ya tenía en culTest .

Si te gustó, si no te gustó, si quieres saludarme, o invitarme a 🍻 no dudes en escribirme en cristianeslava@gmail.com .