Programación de cámara que sigue al jugador en Unity 2D

Clase 12 de 60Curso Avanzado de Creación de RPGs con Unity

Resumen

Logra que la cámara de tu juego 2D en Unity siga al personaje de forma fluida y profesional. Aquí verás cómo implementar un seguimiento suave con Lerp, configurar variables serializadas y respetar la coordenada Z para evitar distorsiones visuales. Todo con un script simple, claro y mantenible.

¿Qué problema resuelve y por qué seguir al jugador?

La cámara estaba quieta en el centro y el jugador se perdía fuera de plano. La solución es que la cámara siga al jugador con un retardo suave. Puedes hacerlo rápido haciéndola hija del jugador, pero la opción robusta es programarlo por código y controlar la velocidad de seguimiento.

  • El script se asigna a la cámara, no al jugador.
  • El seguimiento debe ser suave para evitar “saltos” visuales.
  • La Z de la cámara se mantiene fija para ver la escena correctamente.

¿Cómo configurar el script CameraFollow en Unity 2D?

Primero crea un script llamado CameraFollow y arrástralo a la cámara en la jerarquía. Usa campos serializados privados para editar desde el inspector sin exponerlos públicamente.

¿Qué variables necesitas y por qué serializarlas?

  • [SerializeField] private GameObject followTarget. El objetivo a seguir (por ejemplo, el jugador).
  • [SerializeField] private Vector3 targetPosition. La posición objetivo calculada cada frame.
  • [SerializeField] private float cameraSpeed = 4f. La velocidad del seguimiento.

Ventajas de usar [SerializeField]: - Editas desde el editor manteniendo el encapsulamiento. - Evitas que otros accedan al estado interno del script.

¿Cómo calcular targetPosition y respetar la z?

  • Toma la X e Y del objetivo: followTarget.transform.position.x/y.
  • Conserva la Z de la propia cámara: transform.position.z.
  • Recuerda: en 2D todo está en Z = 0, excepto la cámara, que suele estar en Z = -10. Mantener esa Z evita perder de vista la escena.

¿Cómo asignar el objetivo followTarget en el editor?

  • Selecciona la cámara en la jerarquía.
  • En el componente CameraFollow, arrastra el Player al campo followTarget.
  • Ajusta cameraSpeed para que coincida con el ritmo del jugador.

¿Cómo suavizar el movimiento con interpolación lineal Lerp?

Para evitar movimientos bruscos, usa interpolación lineal con Vector3.Lerp. La idea: moverte del punto A (posición actual de la cámara) al punto B (targetPosition) de forma continua. El factor de interpolación combina velocidad y tiempo: cameraSpeed * Time.deltaTime. Recuerda la relación física: espacio = velocidad × tiempo.

¿Qué código mínimo implementa el seguimiento?

using UnityEngine;

public class CameraFollow : MonoBehaviour
{
    [SerializeField] private GameObject followTarget;
    [SerializeField] private Vector3 targetPosition;
    [SerializeField] private float cameraSpeed = 4f;

    void Update()
    {
        if (followTarget == null) return;

        targetPosition = new Vector3(
            followTarget.transform.position.x,
            followTarget.transform.position.y,
            transform.position.z // Mantiene la Z de la cámara (p. ej., -10).
        );

        transform.position = Vector3.Lerp(
            transform.position,
            targetPosition,
            cameraSpeed * Time.deltaTime
        );
    }
}

¿Cómo probar y qué ajustar para un seguimiento estable?

  • Comprueba que followTarget apunta al Player.
  • Alinea cameraSpeed con la velocidad del jugador para evitar que lo “pierda”.
  • Observa límites del escenario: si bajas demasiado puedes salirte del mapa; es un ajuste posterior que podrás resolver más adelante.

¿Quieres que cubra límites de cámara, clamping o seguimiento de otros objetivos como enemigos o NPCs? Escribe tus dudas y casos de uso en los comentarios.