Ver un borde azul al llegar a los extremos del mapa rompe la inmersión. La forma más sólida de corregirlo es fijar límites de cámara con un BoxCollider2D en modo trigger y bloquear el movimiento con MathF.Clamp, respetando el aspect ratio de pantalla. Además, conviene organizar prefabs y GameObjects para mantener el proyecto claro y escalable.
¿Cómo evitar el fondo azul con límites de cámara?
Para impedir que la cámara se mueva fuera del escenario, crea un contenedor de límites que envuelva el mapa y que la cámara nunca pueda rebasar.
- Crea un GameObject vacío llamado Camera Limits en posición 0,0,0.
- Añade un BoxCollider2D y marca Is Trigger. Evitas colisiones con el personaje.
- Escala el collider para cubrir el escenario. Deja unos píxeles dentro del borde para no mostrar azul.
- Si quieres estética adicional, coloca bosques u objetos en el borde. La lógica seguirá funcionando.
Idea clave: la cámara no debe superar los bounds del BoxCollider2D. El centro de la cámara más la mitad de su anchura o altura nunca debe cruzar los mínimos y máximos del collider.
¿Qué organización con prefabs y objetos mejora la escena?
Una jerarquía clara reduce errores y acelera cambios.
- Agrupa elementos de quests bajo un GameObject vacío llamado "quest". Incluye: quest start, quest end y objetos recolectables (p. ej., la campana).
- Crea prefabs de estos elementos. Reutiliza y cambia sprite/nombre cuando lo necesites.
- Agrupa NPCs y su lógica (p. ej., la "villager zone") bajo otro GameObject vacío. Facilita leer y navegar la escena.
Beneficio: estructuras compactas y coherentes que simplifican el mantenimiento y la ampliación del mapa.
¿Cómo programar el bloqueo con cámara ortográfica y clamp?
La cámara es ortográfica con tamaño 5. El juego es horizontal: la anchura domina a la altura. Calcula las mitades visibles, precalcula límites y aplica MathF.Clamp tras mover la cámara en Update.
¿Qué variables y componentes necesitas?
- Usa variables privadas para rendimiento y claridad. Precálculo evita recomputar en Update.
- Componentes y datos:
- Cámara: Camera del propio objeto.
- Límites: BoxCollider2D de "Camera Limits".
- Extremos: Bounds.min y Bounds.max.
- Mitades visibles: halfWidth y halfHeight.
// Variables
private Camera theCamera;
private BoxCollider2D cameraLimits;
private Vector3 minLimits, maxLimits;
private float halfWidth, halfHeight;
// Inicialización
cameraLimits = GameObject.Find("Camera Limits").GetComponent<BoxCollider2D>();
minLimits = cameraLimits.bounds.min;
maxLimits = cameraLimits.bounds.max;
theCamera = GetComponent<Camera>();
¿Cómo calcular half width y half height con aspect ratio?
El tamaño ortográfico define la escala visible. La proporción entre anchura y altura se conserva con la relación de pantalla (aspect ratio). Es una regla de proporciones, como el "teorema de Tales".
// La anchura manda en horizontal
halfWidth = theCamera.orthographicSize;
// Ajusta la altura con la relación de pantalla
halfHeight = halfWidth / Screen.width * Screen.height;
Ventaja: se adapta a editor, mobile, consola, tele 16:9 o 4K. La cámara responde de forma coherente.
Sugerencia: activa el modo Debug del inspector para ver variables privadas y verificar que los valores coinciden con lo esperado.
¿Cómo mantener la posición con MathF.Clamp en Update?
Tras actualizar la posición de seguimiento, limita X e Y para que el centro de la cámara no cruce los bounds menos sus mitades visibles. Mantén Z constante.
// En Update, después de mover la cámara
float clampX = MathF.Clamp(
transform.position.x,
minLimits.x + halfWidth,
maxLimits.x - halfWidth
);
float clampY = MathF.Clamp(
transform.position.y,
minLimits.y + halfHeight,
maxLimits.y - halfHeight
);
transform.position = new Vector3(clampX, clampY, transform.position.z);
Ajuste fino: si la cámara aún muestra una franja azul, refina el tamaño del BoxCollider2D en cada borde hasta lograr un resultado "pixel perfect".
¿Te gustaría que profundicemos en más técnicas de cámara o en optimización de colliders? Comparte tus dudas y casos en los comentarios.