Ajuste Dinámico de Límites de Cámara en Unity

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

Resumen

Optimiza la cámara en Unity 2D con límites que se actualizan al entrar en cada escena. Aprende a mover la lógica del cálculo desde Start a un método reutilizable, crear un prefab de límites, notificar a la cámara con un script dedicado y ajustar el orden de ejecución. El resultado: transiciones limpias entre escenas y bordes bien confinados, incluso en interiores.

¿Cómo evitar que los límites de cámara fallen al cambiar de escena?

Mover la lógica a un método hace que los límites se recalculen cuando cambias de entorno. Además, un prefab de camera limits garantiza coherencia entre escenas.

  • El fallo surge porque el cálculo de límites ocurre en Start y no al entrar en una nueva escena.
  • Solución: crear un método público para cambiar límites y llamarlo cada vez que instancias nuevos bordes.
  • Usa un prefab de camera limits en cada escena y ajusta su tamaño al entorno.

¿Por qué el camera limits no funciona entre escenas?

  • Porque solo se recalcula al inicio de la escena actual.
  • Al cargar otra escena, los límites previos siguen aplicando.
  • Un método reutilizable evita ese acoplamiento y facilita el cambio dinámico.

¿Cómo convertir la lógica del start en un método change limits?

  • Crea un método público que reciba un BoxCollider2D con los nuevos límites.
  • Mueve toda la lógica de mínimos, máximos y ajuste de cámara a este método.
  • En Start, invoca al nuevo método solo para la inicialización.
public class CameraFollow : MonoBehaviour
{
    // ... campos y referencias de cámara.

    public void ChangeLimits(BoxCollider2D newCameraLimits)
    {
        // Recalcular minLimits, maxLimits, etc., usando newCameraLimits.
        // ...
    }

    private void Start()
    {
        // Encontrar los límites iniciales de la escena y delegar.
        // ChangeLimits(limitsEncontrados);
    }
}

¿Qué errores comunes aparecen con prefabs y tamaños del box collider 2D?

  • Al sobreescribir el prefab, también se sobreescribe el tamaño del BoxCollider2D.
  • Ajusta manualmente el collider y deja un margen: no lo lleves exactamente al borde.
  • En interiores pequeños y cámaras grandes, verás algo de exterior: es normal. Puedes añadir una imagen de fondo o un pequeño Easter egg.

¿Cómo notificar a la cámara con un script camera limits?

Al instanciar nuevos bordes, la cámara debe enterarse. Un script en el GameObject de camera limits llama al método de la cámara y actualiza los límites al vuelo.

  • Crea un script llamado, por ejemplo, CameraLimits y asígnalo al GameObject de camera limits.
  • Exige un BoxCollider2D con [RequireComponent] para evitar olvidos.
  • Notifica a la cámara con FindObjectOfType() y pasa el collider actual.

¿Qué componentes requiere el camera limits?

[RequireComponent(typeof(BoxCollider2D))]
public class CameraLimits : MonoBehaviour
{
    // Asegura que exista un BoxCollider2D en este objeto.
}

¿Cómo invocar change limits dinámicamente?

[RequireComponent(typeof(BoxCollider2D))]
public class CameraLimits : MonoBehaviour
{
    private void Start()
    {
        var follow = FindObjectOfType<CameraFollow>();
        if (follow != null)
        {
            follow.ChangeLimits(GetComponent<BoxCollider2D>());
        }
    }
}
  • Así, cada vez que esté presente este GameObject en una escena, la cámara actualiza sus límites.

¿Cómo ajustar el orden de ejecución en project settings?

  • En Project Settings configura el orden de ejecución para que el script de CameraLimits se ejecute ligeramente después.
  • Retrasar ~105 ms evita conflictos con la creación simultánea de objetos.

¿Cómo depurar y ajustar el comportamiento en escenas pequeñas?

Pequeños errores de referencia o nombres mal puestos rompen el flujo. Revisa la consola y limpia dependencias obsoletas.

  • Si tenías una variable de camera limits en el script de la cámara, elimínala y pasa a usar el parámetro del método.
  • Asegúrate de usar nombres coherentes como NewCameraLimits si los empleas en el código.
  • Observa en la consola qué camera limits está tomando y corrige tamaños del BoxCollider2D si la cámara queda “encerrada” o se ve demasiado exterior.

¿Qué ajustes de tamaño del box collider 2D mejoran la experiencia?

  • Reduce el collider para restringir el movimiento de la cámara dentro de interiores.
  • Evita hacerlo demasiado pequeño si la cámara es grande: verás vibraciones o bloqueos.
  • Deja un pequeño margen respecto al borde para una vista natural.

¿Qué buenas prácticas al depurar en la consola?

  • Verifica errores de referencia al entrar en interiores y exteriores.
  • Comprueba qué prefab de camera limits se está usando y su tamaño real.
  • Repite pruebas desde la Main Scene y al entrar en interiores para confirmar el recalculo.

¿Te quedó alguna duda sobre el flujo o sobre cómo estructurar los scripts? Comparte tu caso y comentamos cómo afinarlo.

      Ajuste Dinámico de Límites de Cámara en Unity