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

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

Contenido del curso

Personaje principal: Movimiento y Animaciones

Enemigos Avanzados

Personaje principal avanzado

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<CameraFollow>() 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