🎮 UnityDocs

Cámara en tercera persona

Receta para una cámara de tercera persona que orbita alrededor del personaje con el ratón/stick y no atraviesa las paredes, usando Cinemachine 3 (Unity 6): Orbital Follow + deoclusión, sin escribir la matemática de cámara a mano.

🍳 RecetaIntermedio✅ RevisadoUnity 6.0 LTSActualizado 2026-07-17
DificultadConceptual Código Matemáticas
Tiempo📖 Lectura 6 min · ⌨️ Práctica 20 min

El objetivo#

Una cámara que va detrás del personaje, gira alrededor de él con el ratón o el stick derecho, y no se mete dentro de las paredes cuando el personaje se pega a una. Todo esto lo resuelve Cinemachine sin escribir la matemática de cámara.

Cinemachine 3 en Unity 6

En Cinemachine 3 (el que trae Unity 6) el componente se llama CinemachineCamera (antes Virtual Camera), y el comportamiento de seguimiento orbital es Orbital Follow. Los tutoriales viejos usan CinemachineVirtualCamera y FreeLook de Cinemachine 2; el concepto es el mismo, los nombres cambian.

Montaje#

  1. Instala Cinemachine (Package Manager) si no está.
  2. GameObject → Cinemachine → Cinemachine Camera. Esto añade también un Cinemachine Brain a tu Main Camera (el que "obedece" a las cámaras virtuales).
  3. En la CinemachineCamera:
  4. Tracking Target: arrastra el personaje (o un objeto vacío a la altura de su cabeza/pecho — más cómodo que apuntar a los pies).
  5. Position Control → Orbital Follow: la cámara orbita alrededor del target a una distancia.
  6. Rotation Control → Rotation Composer (o Hard Look At): mantiene al personaje encuadrado.

Girar con el ratón / stick#

El Orbital Follow se controla con un input de eje. Con el nuevo Input System, conéctalo mediante el Cinemachine Input Axis Controller (se añade a la cámara) y asígnale las acciones Look (ratón / stick derecho). Con eso, mover el ratón orbita la cámara. Ajusta la sensibilidad y si el eje Y va invertido.

Que no atraviese paredes: deoclusión#

El problema clásico de tercera persona: al pegarte a un muro, la cámara se mete dentro y ves el interior de la geometría. Cinemachine lo resuelve con una extensión de deoclusión:

Añade el Cinemachine Deoccluder

En la CinemachineCamera, Add Extension → Cinemachine Deoccluder (en Cinemachine 2 se llamaba Collider). Acerca automáticamente la cámara cuando hay un obstáculo entre ella y el personaje, evitando ver a través de las paredes. Indícale la capa de los obstáculos (Collide Against).

Orientar el personaje según la cámara#

En tercera persona, el personaje suele mirar hacia donde apunta la cámara al moverse. En tu script de movimiento, calcula la dirección relativa a la cámara y gira el personaje hacia ella con rotaciones suaves:

C#
// dir de movimiento relativa a la cámara (aplanada al suelo)
Vector3 fwd = camara.forward; fwd.y = 0; fwd.Normalize();
Vector3 right = camara.right; right.y = 0; right.Normalize();
Vector3 dir = (fwd * input.y + right * input.x);

if (dir.sqrMagnitude > 0.01f)
{
    Quaternion objetivo = Quaternion.LookRotation(dir);
    transform.rotation = Quaternion.Slerp(transform.rotation, objetivo, 10f * Time.deltaTime);
}

Errores frecuentes#

  • Apuntar el target a los pies del personaje (la cámara queda muy baja): usa un objeto a la altura del pecho.
  • Cámara que atraviesa paredes: falta el Cinemachine Deoccluder (o su capa de colisión mal puesta).
  • Buscar CinemachineVirtualCamera/FreeLook en Unity 6 (son de Cinemachine 2; ahora es CinemachineCamera + Orbital Follow).
  • Girar el personaje con el mismo input que la cámara sin aplanar la Y (mira al cielo/suelo).
  • Sensibilidad del eje sin ajustar (cámara hipernerviosa o pastosa).

Ponte a prueba#

📝 Pon a prueba lo aprendido

Resumen#

Una cámara de tercera persona sólida se monta con Cinemachine 3: una CinemachineCamera con Orbital Follow apuntando a un target a la altura del pecho, girada con el ratón/stick vía el Input Axis Controller, y con un Cinemachine Deoccluder para no atravesar paredes. Luego orientas el personaje hacia la dirección de la cámara con rotaciones suaves. Sin escribir la matemática de cámara a mano.

Fuentes y para profundizar