Límites de cámara en juegos 2D: implementación y ajuste

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

Resumen

¿Cómo evitar que la cámara se mueva fuera de los límites en un videojuego de rol?

En el desarrollo de videojuegos, especialmente en géneros como los juegos de rol, es común enfrentar el problema de que la cámara muestre áreas no deseadas, como el borde azul en la pantalla. Pero no te preocupes, existe una técnica efectiva para resolverlo: limitar el movimiento de la cámara dentro de un área específica. A continuación, veremos cómo puedes acabar con este problema y optimizar la experiencia de juego.

¿Cuál es el primer paso para definir los límites de la cámara?

Lo primero que haremos es establecer un área que delimitará el movimiento de la cámara. Imagina que estás creando un margen invisible alrededor de tu escenario. Esto se puede lograr fácilmente usando un BoxCollider2D de tipo "Trigger" en Unity. Aquí tienes los pasos básicos:

  1. Crear un GameObject vacío y nombrarlo cameraLimits.
  2. Posicionarlo en las coordenadas (0, 0, 0), es decir, en el centro del escenario.
  3. Añadirle un BoxCollider2D y ajustarlo para que abarque todo el escenario excluyendo el área no deseada.

¿Cómo podemos implementar el código para confinar la cámara?

Ahora que tenemos nuestro BoxCollider2D listo, debemos programar la cámara para que se mantenga dentro de estos límites. Esto se logra mediante el uso de un script que ajustará la posición de la cámara.

private Camera theCamera;
private BoxCollider2D cameraLimits;
private Vector3 minLimits, maxLimits;
private float halfWidth, halfHeight;

private void Start()
{
    theCamera = GetComponent<Camera>();
    cameraLimits = GameObject.Find("cameraLimits").GetComponent<BoxCollider2D>();
    minLimits = cameraLimits.bounds.min;
    maxLimits = cameraLimits.bounds.max;

    // Calcular la mitad de la anchura y altura de la cámara
    halfHeight = theCamera.orthographicSize;
    halfWidth = halfHeight * Screen.width / Screen.height;
}

private void LateUpdate()
{
    // Ajustar posición de la cámara para que no salga de los límites
    float clampedX = Mathf.Clamp(transform.position.x, minLimits.x + halfWidth, maxLimits.x - halfWidth);
    float clampedY = Mathf.Clamp(transform.position.y, minLimits.y + halfHeight, maxLimits.y - halfHeight);

    transform.position = new Vector3(clampedX, clampedY, transform.position.z);
}

¿Qué hay que tener en cuenta para ajustar la proporción?

Al ajustar el movimiento de la cámara, tendrás en cuenta la relación de aspecto de tu juego. Esto asegura que la cámara se ajuste adecuadamente en diferentes dispositivos, como móviles, televisores o pantallas de distintas resoluciones:

  • La halfHeight se calcula directamente del tamaño ortográfico de la cámara.
  • halfWidth se ajusta usando la relación entre el ancho y el alto de la pantalla: halfWidth = halfHeight * Screen.width / Screen.height.

¿Cómo verificar que todo funcione correctamente?

Una vez que hayas escrito y agregado el script a la cámara:

  1. Cambia al modo "Debug" en Unity para asegurarte de que todas las variables privadas se configuren correctamente.
  2. Ejecuta el juego y desplázate hacia los bordes de la escena. La cámara debería detenerse suavemente al alcanzar los límites.
  3. Si observas algún borde azul residual, ajusta el BoxCollider2D y asegúrate de que sus bordes coincidan perfectamente con el área de juego.

Programar y ajustar los límites de la cámara es crucial para garantizar una experiencia visual impresionante y consistente en juegos de rol. Continúa explorando y aprendiendo, verás que los detalles marcan una gran diferencia en el producto final.