Contenido del curso

Mecánica Principal

Cámara ortográfica automática en Unity

Resumen

Cuando creas una cuadrícula dinámica en Unity, la cámara casi nunca queda donde necesitas. Aquí aprendes a ajustar posición y tamaño ortográfico de la cámara en Unity desde código, para que tu Vboard se vea centrada sin importar sus dimensiones. Es una técnica clave si estás desarrollando juegos 2D con grids generados por script.

¿Qué es el tamaño ortográfico de una cámara en Unity?

El tamaño ortográfico define cuánto del escenario alcanza a ver tu cámara en 2D. En palabras simples, es la distancia desde el centro de la pantalla hasta el borde superior o inferior, medida en unidades de Unity [00:24].

Imagina que tu escenario es un cuadrado y la cámara, un recuadro que lo encuadra. Si el escenario es más alto que ancho, necesitas un tamaño ortográfico que cubra esa altura. Si es más ancho que alto, el cálculo cambia. La regla práctica: revisa qué dimensión es mayor y úsala como referencia.

¿Qué controla el orthographic size en Unity? Controla el zoom vertical de la cámara 2D. Un valor más pequeño acerca la imagen; uno más grande aleja y muestra más escenario.

¿Cómo posicionar la cámara automáticamente desde un script?

Dentro del script de tu Vboard creamos una función llamada positionCamera que se invoca desde Start [01:25]. La idea es calcular el centro del board usando su ancho y alto.

Los pasos clave dentro de la función:

  • Crear un float newPosX igual a (float)width / 2f.
  • Crear un float newPosY igual a (float)height / 2f.
  • Asignar Camera.main.transform.position con un new Vector3(newPosX, newPosY, -10).

El cast a float es importante porque width y height son enteros. Sin ese casting, la división podría devolver resultados imprecisos [02:24]. Yo prefiero forzar el tipo con la f al final del 2 para evitar sorpresas.

¿Por qué la cámara queda descentrada con medio cuadro?

Unity cuenta sus unidades desde la esquina inferior izquierda, pero los objetos se posicionan desde su centro [04:00]. Por eso, al calcular width/2 y height/2, la cámara aterriza en una esquina interna de tu cuadrícula y no en el centro visual.

La solución es restar 0.5 unidades tanto a newPosX como a newPosY. Ese pequeño offset compensa la diferencia entre cómo Unity mide posiciones y cómo se ubican tus elementos [04:33].

¿Cómo ajustar el tamaño ortográfico según el tamaño del board?

Con una cuadrícula de 5x5 todo cabe en pantalla, pero si la cambias a 20x20, la cámara se queda corta [05:08]. Hay que calcular dinámicamente el orthographic size.

Dentro de positionCamera agregamos:

  • float horizontal = width + 1 para el cálculo horizontal con margen.
  • float vertical = height / 2f + 1 porque el tamaño ortográfico equivale a la mitad de la altura visible.
  • Asignar Camera.main.orthographicSize con el mayor de los dos valores usando una operación ternaria.

El margen extra de una unidad evita que el board quede pegado a los bordes de la pantalla [06:30]. La operación ternaria luce así:

csharp Camera.main.orthographicSize = horizontal > vertical ? horizontal : vertical;

Es un if condensado en una sola línea: si horizontal es mayor, usa horizontal; si no, usa vertical [07:30].

¿Qué es una operación ternaria en C#? Es una forma corta de escribir un if-else en una línea. Sigue el formato condición ? valorSiVerdadero : valorSiFalso y devuelve uno de los dos valores según el resultado.

¿Cómo personalizar la cámara con offsets configurables?

Una vez que la cámara se ajusta sola, conviene dejar margen para futuras interfaces de usuario. Para eso creamos dos variables públicas en la clase del board [08:30]:

  • public float cameraSizeOffset: suma un valor al tamaño ortográfico final, ideal para hacer zoom in o zoom out.
  • public float cameraVerticalOffset: desplaza la cámara verticalmente para dejar espacio a HUDs o menús.

Estas variables se aplican así dentro del código:

  • En el orthographicSize: suma cameraSizeOffset al resultado de la ternaria.
  • En la posición Y: añade cameraVerticalOffset después del ajuste de 0.5.

¿Qué efecto tienen los offsets en la escena?

Probando en Unity con un cameraVerticalOffset de 5, la cuadrícula se mueve hacia abajo y deja espacio arriba. Con un valor negativo de -3, ocurre lo contrario [10:00]. El cameraSizeOffset funciona como un control de zoom: con 2 la cuadrícula se ve más pequeña, con -3 se agranda [10:36].

Esta flexibilidad será útil cuando agregues paneles, marcadores o botones en pantalla sin tener que recalcular toda la lógica de la cámara.

¿Para qué sirve Camera.main en Unity? Es una variable estática que devuelve la cámara principal de la escena en ese momento. Te permite acceder a sus propiedades sin necesidad de asignarla manualmente desde el inspector.

Un detalle final de configuración: para este tipo de boards, dimensiones como 6 de ancho por 10 de alto suelen ofrecer una experiencia visual cómoda, ni demasiado apretada ni excesivamente vacía [08:00].

¿Habías pensado en otra forma de centrar y escalar la cámara para una cuadrícula generada por código? Cuéntame tu enfoque en los comentarios.