🎮 UnityDocs

Tags y Layers

Dos sistemas que se confunden a menudo: las Tags (etiquetas para identificar objetos) y las Layers (capas para filtrar física y renderizado). Qué son, en qué se diferencian y cómo usar cada una bien.

📄 ArtículoIntermedio✅ RevisadoUnity 6.0 LTSActualizado 2026-07-14
DificultadConceptual Código Matemáticas
Tiempo📖 Lectura 6 min · ⌨️ Práctica 15 min

Dos cosas distintas que se confunden#

  • Tag (etiqueta): una palabra que identifica qué es un objeto ("Player", "Enemy", "Coin"). Sirve para reconocerlo desde código.
  • Layer (capa): un grupo al que pertenece un objeto, usado por el motor para filtrar física, raycasts y renderizado.

Regla mental: Tag = "quién eres", Layer = "cómo te trata el motor".

Tags#

Se crean en el Inspector (arriba, desplegable Tag → Add Tag) y se asignan a cada objeto. Desde código, compáralas con CompareTag:

C#
void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Coin"))
        Recoger(other.gameObject);
}
CompareTag, no ==

Usa other.CompareTag("Coin") en vez de other.tag == "Coin". CompareTag es más rápido y no genera basura para el recolector; además, comparar con una tag inexistente con == puede dar sorpresas. CompareTag con una tag no registrada avisa con un error claro.

Layers#

Se crean en Tag → Add Layer (hay 32 en total, algunas reservadas por Unity). Sus dos usos principales:

1. Filtrar colisiones (Collision Matrix)#

En Project Settings → Physics hay una cuadrícula donde decides qué capas chocan con cuáles. Por ejemplo: que las "BalasJugador" no colisionen con el "Jugador", o que dos "Enemigos" se atraviesen. Es la forma correcta y eficiente de filtrar colisiones, mejor que comprobarlo en código.

2. LayerMask en raycasts y consultas#

Un LayerMask limita a qué capas afecta un raycast o una detección, ignorando el resto:

C#
[SerializeField] private LayerMask capaSuelo;

bool EnSuelo()
{
    // Solo detecta objetos de la(s) capa(s) marcada(s) en el Inspector
    return Physics.Raycast(transform.position, Vector3.down, 1.1f, capaSuelo);
}

Ver Raycasting y Colliders y triggers.

Comparativa#

⚖️ Comparativa · Tag vs Layer
TagLayer
Para quéIdentificar qué es un objetoFiltrar física/render por grupos
CuántasMuchas32 (varias reservadas)
Se usa en código conCompareTag(...)LayerMask, comprobaciones de bits
Un objeto puede tenerUna tagUna layer

Comprobar la layer de un objeto por código#

Las layers funcionan con bits, lo que despista. Para comprobar si un objeto está en un LayerMask:

C#
bool EstaEnMascara(GameObject obj, LayerMask mascara)
{
    // desplaza 1 a la posición de la layer del objeto y comprueba el bit
    return (mascara.value & (1 << obj.layer)) != 0;
}

Errores frecuentes#

  • Usar Tags para lo que deberían ser Layers (filtrar colisiones a mano en código en vez de con la matriz).
  • Comparar tags con == en lugar de CompareTag.
  • Olvidar asignar la layer a todos los objetos que deben filtrarse (una plataforma sin la layer "Suelo" no se detecta).
  • Confundir el índice de la layer con su valor en la máscara (uno usa bits, el otro no).

Resumen#

Las Tags identifican objetos ("es un enemigo"); compáralas con CompareTag. Las Layers agrupan objetos para que el motor filtre colisiones (Collision Matrix) y raycasts (LayerMask). No son intercambiables: usa tags para reconocer y layers para filtrar.

Fuentes y para profundizar