Como mencione en las clases en las que programamos la cámara existe un paquete de Unity llamado cinemachine que facilita un montón el trabajo y tiene un sin numero de posibilidades de configuración. En verdad les recomiendo esta herramienta 😄
Introducción
Game Design del juego
La estructura y assets de un proyecto en Unity
Convirtiendo nuestros assets en Tiles
Tilemaps y creación del escenario
Bonus: FastForward de la creación del escenario, sorting layers y creación de colliders
Acá encontrarás los archivos de este curso
Personaje principal: Movimiento y Animaciones
El jugador y el movimiento
Creando nuestra primera animación
Creando el grafo de animaciones
Usando un árbol de animaciones
Mostrando la solución del desafío e implementando transición entre blended trees
Programando una cámara que siga al jugador
Corrección del bug gráfico
límites del escenario, rigid bodies
Ejercicio: diseño de interiores
Escenarios Avanzados
Transiciones entre escenas
Mantener Player y Camera entre escenas
Spawning Points: programando que el jugador y la cámara aparezcan en el lugar correcto al cambiar de escena
Agregando Identificadores a nuestros Spawning Points para controlar mejor el flujo de nuestro juego
Enemigos Avanzados
Creando nuestro enemigo
Programando las físicas y el patrullaje del enemigo
Generando movimiento completamente aleatorio
Programando el ataque del enemigo
Crear Manager de Health del Player
Crear armas
Programando el ataque del Player con arma
Mover la espada al caminar
Creando el ataque con espada
Ejecutando el ataque con un botón
Movimiento en diagonal
Optimizando nuestro player controller
Ataque mejorado
Uso de partículas
Añadir el daño del enemigo en batalla
Programando los contadores de vida del enemigo
Colocando más info de UI en pantalla
Script de la vida
Personaje principal avanzado
Añadir el daño del personaje (ejercicio)
Sistema de puntos de experiencia para nuestro personaje principal
Level Up!
Level Up! Defensa y Reto Final del Módulo: Stats de los enemigos
Creando un NPC
Limitar el movimiento de nuestro NPC
Creando una pantalla de diálogos para nuestro RPG
El diálogo del NPC
Múltiples líneas de diálogo
Parar el NPC durante el diálogo
Parar el personaje durante el diálogo
Quests
La estructura de una quest
Quest 1: Ir a un lugar
Quest 2: Encontrar un objeto
Quest 3: Matar enemigos
Revisión de bugs
Mantener la cámara dentro del escenario
El problema al cambiar de escena
Audio
Agregando SFX a nuestro videojuego
Agregando música a nuestro videojuego
Ajustar volúmen del audio de cada uno de los efectos de sonido
Creando un VolumeManager
Agregando economía a nuestro juego y cierre
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
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.
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:
GameObject
vacío y nombrarlo cameraLimits
.BoxCollider2D
y ajustarlo para que abarque todo el escenario excluyendo el área no deseada.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);
}
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:
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
.Una vez que hayas escrito y agregado el script a la cámara:
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.
Aportes 5
Preguntas 0
Como mencione en las clases en las que programamos la cámara existe un paquete de Unity llamado cinemachine que facilita un montón el trabajo y tiene un sin numero de posibilidades de configuración. En verdad les recomiendo esta herramienta 😄
La camara se sale del boundary que habiamos hecho porque al inicializar los parametros halfHeight, y halfWidth se deben inicializar asi:
halfHeight = theCamera.orthographicSize;
halfWidth = halfHeight / Screen.height * Screen.width;
Es más sencillo usar Cinemachine. Quería hacerlo de la forma del profe, pero mi escenario no es cuadrado como el de él. Con lo cual tendría que agregar más de un objeto como collider para los camera limits, y traerlo un array tal vez? No se la verdad. Voy por el camino facil
Genial
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?