Nuevo: grupo en vivo para hacer y publicar tu primer juego

Anotate

Colisiones y Triggers en Unity 2D: OnCollisionEnter2D vs OnTriggerEnter2D

L
Lautaro Bravo de la Serna
•2 de noviembre de 2026•8 min de lectura
Colisiones y Triggers en Unity 2D: OnCollisionEnter2D vs OnTriggerEnter2D

Resumen rápido

  • →Para que haya colisión, los dos objetos necesitan un Collider2D y al menos uno un Rigidbody2D.
  • →Una colisión es física: los objetos chocan. Se detecta con OnCollisionEnter2D.
  • →Un trigger se atraviesa y solo avisa. Se activa con Is Trigger y se detecta con OnTriggerEnter2D.
  • →Si tu personaje se queda pegado a las paredes, ponele un Physics Material 2D con fricción 0.

Casi todo lo interesante de un juego pasa cuando dos cosas se tocan: un enemigo te golpea, juntás una moneda, llegás a la meta. En Unity eso se resuelve con dos herramientas parecidas pero distintas, las colisiones y los triggers, y confundirlas es de los errores más comunes al empezar.

Este tutorial está basado en las clases de colisiones, puntos y condición de victoria del curso Unity De Cero a Pro de Codearte. Todo es en 2D, y en la tabla comparativa vas a ver qué cambia en 3D.

🧱

Por qué tus colliders no chocan

Lo primero que hace todo el mundo es agregar un Box Collider 2D al jugador y otro al enemigo, darle Play y... no pasa nada. Se atraviesan como si nada.

⚙️

Las colisiones son físicas

Un collider solo define la forma del objeto. Para que Unity calcule choques, al menos uno de los dos objetos tiene que tener un Rigidbody2D. Dos colliders solos no hacen nada.

1

Ajustá el collider

Agregá un Box Collider 2D a cada objeto y achicalo para que tape solo el dibujo. Por defecto suele quedar con espacio de sobra, y eso se nota en choques que pasan "en el aire".

2

Agregá un Rigidbody2D a uno de los dos

Ahora sí chocan. Pero el objeto se cae: el Rigidbody trae gravedad.

3

Si es top down, sacale la gravedad

En un juego visto desde arriba (como el de autos del curso) poné Gravity Scale en 0. En un plataformero la dejás.

⚖️

Colisión vs trigger

Los dos usan el mismo componente collider. La diferencia es la casilla Is Trigger: si está apagada, el collider es sólido. Si está prendida, es traspasable y solo sirve para detectar.

ColisiónOnCollisionEnter2Dchoca y frenaTriggerOnTriggerEnter2Dlo atraviesa y avisa
Mismo collider, una sola casilla de diferencia: Is Trigger.
ColisiónTrigger
Is TriggerApagadoPrendido
¿Se atraviesa?No, chocaSí
Función 2DOnCollisionEnter2D(Collision2D)OnTriggerEnter2D(Collider2D)
Función 3DOnCollisionEnter(Collision)OnTriggerEnter(Collider)
Para quéParedes, pisos, enemigos que empujanMonedas, power-ups, zonas, la meta

Cada una tiene tres variantes: Enter (el primer frame en que se tocan), Stay (mientras siguen tocándose) y Exit (cuando se separan). La que más vas a usar es Enter.

💥

Ejemplo 1: destruir un enemigo al chocar

En el juego del curso, el auto tiene que atrapar bichos voladores. El script va en el enemigo: cuando choca con algo, se destruye.

Enemigo.cs
using UnityEngine;

public class Enemigo : MonoBehaviour
{
    private void OnCollisionEnter2D(Collision2D collision)
    {
        Destroy(gameObject);
    }
}
  • collision trae la información del choque. Con collision.gameObject accedés al otro objeto.
  • gameObject a secas es el propio objeto, así como transform es su propio Transform.
  • Destroy saca el objeto de la escena y lo descarga por completo.
Ojo con el nombre exacto. Si escribís OnCollisionEnter en un objeto 2D (o OnCollisionEnter2D en uno 3D), Unity no tira error: simplemente nunca la llama. Las versiones 2D y 3D no se mezclan.
🍎

Ejemplo 2: juntar monedas con un trigger

Una moneda (en el curso, una manzana) no es una plataforma: no tendrías que poder pararte encima. Por eso su Box Collider 2D va con Is Trigger prendido. Le agregás un script vacío llamado Manzana que sirve para reconocerla, y la lógica va en el jugador:

Jugador.cs
using UnityEngine;
using TMPro;

public class Jugador : MonoBehaviour
{
    public TextMeshProUGUI puntosUI;
    private int puntos = 0;

    private void OnTriggerEnter2D(Collider2D other)
    {
        if (other.GetComponent<Manzana>() != null)
        {
            puntos += 10;
            puntosUI.text = "Puntos: " + puntos;
            Destroy(other.gameObject);
        }
    }
}
  • Preguntar si el otro objeto tiene el componente Manzana es una forma simple de saber qué tocaste.
  • puntosUI es el texto del Canvas. Lo arrastrás desde el Inspector. Fijate que se modifica .text, no el componente entero.
  • Acá se destruye other.gameObject (la manzana), no gameObject (el jugador).
Otra forma común es ponerle un tag "Moneda" y preguntar other.CompareTag("Moneda"). Las dos funcionan. El componente tiene la ventaja de que, si mañana la manzana guarda cuántos puntos vale, ya lo tenés a mano.
🏁

Ejemplo 3: detectar la meta y mostrar "Ganaste"

La meta es una zona invisible con un trigger. Creás un objeto ZonaFinal con un Box Collider 2D en Is Trigger, sin Sprite Renderer para que no se vea, y adentro ponés una bandera como decoración.

En el Canvas armás un panel oscuro con el texto "¡Ganaste!" y lo dejás apagado. Después sumás esto al OnTriggerEnter2D del jugador:

Jugador.cs
public GameObject winPopup;

private void OnTriggerEnter2D(Collider2D other)
{
    // ...lo de las manzanas

    if (other.GetComponent<ZonaFinal>() != null)
    {
        winPopup.SetActive(true);
    }
}

SetActive(true) prende un GameObject y SetActive(false) lo apaga. Es la forma más simple de mostrar y ocultar pantallas de UI.

🧲

Fix: el personaje se pega a las paredes

Un problema clásico del plataformero: saltás contra una pared, mantenés la flecha hacia ella y el personaje queda colgado en el aire. Pasa porque le estás aplicando velocidad contra el collider y la fricción lo frena.

1

Creá un Physics Material 2D

En la ventana Project: clic derecho, Create, 2D, Physics Material 2D. Llamalo por ejemplo Piso.

2

Poné Friction en 0

Sin fricción, el personaje se desliza en vez de engancharse.

3

Asignalo al collider de las plataformas

Arrastralo al campo Material del collider. Hacelo en todas las plataformas donde pase, o asignáselo al Rigidbody2D del jugador para resolverlo de una.


📋

Resumen rápido

🧱 Colisión

Para cosas sólidas que tienen que frenar o empujar.

  • • Collider en los dos, Rigidbody2D en al menos uno
  • • Is Trigger apagado
  • • OnCollisionEnter2D(Collision2D collision)

✨ Trigger

Para detectar sin chocar: objetos, zonas, metas.

  • • Collider en los dos, Rigidbody2D en al menos uno
  • • Is Trigger prendido
  • • OnTriggerEnter2D(Collider2D other)

Preguntas frecuentes

¿Por qué no funciona OnCollisionEnter2D en Unity?

Las causas más comunes: ninguno de los dos objetos tiene Rigidbody2D, uno de los colliders tiene Is Trigger prendido (entonces se llama OnTriggerEnter2D), o estás mezclando 2D y 3D (BoxCollider con OnCollisionEnter2D, o al revés).

¿Cuál es la diferencia entre OnCollisionEnter y OnTriggerEnter?

OnCollisionEnter se llama cuando dos colliders sólidos chocan físicamente. OnTriggerEnter se llama cuando un objeto entra en un collider marcado como Is Trigger, que se puede atravesar y solo sirve para detectar.

¿Un trigger necesita Rigidbody?

Sí. Para que Unity detecte el contacto, al menos uno de los dos objetos tiene que tener un Rigidbody (Rigidbody2D en 2D). Normalmente lo tiene el jugador.

¿Cómo sé con qué objeto choqué?

Con collision.gameObject (en colisiones) u other.gameObject (en triggers). Para identificarlo, preguntá si tiene un componente con GetComponent o un tag con CompareTag.

¿Cómo evito que mi personaje se pegue a las paredes en Unity 2D?

Creá un Physics Material 2D con Friction en 0 y asignalo al collider de las paredes y plataformas, o al Rigidbody2D del jugador.

Hacé tu primer juego completo en Unity

En Unity De Cero a Pro armás tres juegos de punta a punta: colisiones, puntos, menús, sonido, animaciones y el build final para publicarlo.

Ver el curso De Cero a Pro
Tags:#unity#csharp#unity-2d#colisiones#triggers#tutorial
🎮

¿Quieres crear tus propios juegos?

Aprende a programar videojuegos desde cero con nuestros cursos en Unity. Más de 3,000 estudiantes ya empezaron su camino.

Ver cursos gratuitos