El personaje y el controlador
Introducción: De la idea al desarrollo
Estructura de carpetas en Unity
Assets, Game Objects y Sprite Atlas
Animaciones desde un sprite map
Animation Controller y Transiciones
Plataformas y gravedad
FÃsica en Unity
El script de control
Programando funciones en C# y Unity: Jump
Detectar el suelo con Raycast
Herramientas de debugging visual
Cambiar las animaciones según los estados
Reto: Terminando nuestras animaciones
Solución del reto
Hacer que el personaje camine
El manager del videojuego
Cómo funciona el Game Manager
El Singleton
El modo de juego
Input manager y juegos multiplataforma
Corrección del Bug del salto
La zona de muerte
Reiniciar la partida
Corrigiendo los bugs al reiniciar nuestro juego
Diseño procedural de niveles 2D
El diseño de niveles a mano
Configurando nuestros assets para el diseño procedural
Generación procedural de niveles
Creando la zona que eliminará bloques del nivel excedentes
Añadir un nuevo bloque de forma aleatoria
La cámara que sigue al jugador
Destrucción de bloques antiguos
Terminando de programar la destrucción de bloques antiguos
Solucionando el salto de la cámara al reiniciar el juego
HUD, menús y gameplay
El canvas en Unity
Uso de botones para crear un menú
La lógica de los menús
Ejercicio: Preparando el menú del juego
Programando el menú del juego
Los coleccionables del juego
Actualizar UI de coleccionables
Iniciando con pociones y maná
Pociones de vida y maná
Programando las barras de vida y maná
Calculando los puntajes con la distancia y el tiempo de juego
La lógica del maná
Enemigos y dificultad
Plataformas móviles
Iniciar movimiento de la plataforma con trigger
Enemigos móviles
Enemigos móviles: preparando nuestro enemigo para girar
Enemigos móviles: programando que gire al chocar
Arreglando el collider de nuestra roca
Programando la condición de muerte del personaje
Añadiendo música de fondo a nuestro videojuego
Añadiendo efectos de sonido y cierre del curso
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Al ver cómo los videojuegos guardan la puntuación, es fascinante darse cuenta de las múltiples maneras en que se puede implementar y calcular este sistema. La elección de la métrica adecuada, como la distancia recorrida, puede proporcionar un marco emocionante para desafiar y motivar a los jugadores. Aquà exploraremos cómo implementar este sistema utilizando Unity y cómo podemos aumentar la dificultad de juego con pequeños ajustes.
Existen múltiples posibilidades para determinar la puntuación en un videojuego: el tiempo jugado, la cantidad de enemigos derrotados, o la distancia recorrida. En este caso, nos centraremos en el concepto de la distancia, pero con un enfoque simplificado, pues nos moveremos en una sola dimensión (el eje x). La idea es calcular la distancia desde un punto de inicio hasta un punto final para obtener la puntuación.
Para calcular la distancia, modificaremos el script del jugador:
public float GetTravelledDistance() {
return transform.position.x - startPosition.x;
}
Este método calcula simplemente la diferencia en la posición x del personaje, indicando cuánto ha avanzado en nuestro juego en términos de distancia.
En el contexto de Unity, es importante evitar cálculos redundantes en cada actualización o frame. Por lo tanto, referenciamos de manera efectiva el PlayerController en el método Start
de nuestra vista de juego:
private PlayerController controller;
void Start() {
controller = GameObject.Find("Player").GetComponent<PlayerController>();
}
AsÃ, accedemos directamente a la propiedad de la distancia, optimizando el rendimiento.
La persistencia de datos es crucial para guardar la puntuación máxima alcanzada por un jugador, incluso después de cerrar el juego. En Unity, PlayerPrefs
es una herramienta valiosa para este propósito.
Cada vez que el jugador muere, calcularemos si la distancia recorrida durante ese intento supera la puntuación máxima registrada hasta ahora. Si es asÃ, actualizamos el valor almacenado como la nueva puntuación máxima:
void UpdateMaxScore() {
float travelDistance = GetTravelledDistance();
float previousMaxDistance = PlayerPrefs.GetFloat("MaxScore", 0);
if (travelDistance > previousMaxDistance) {
PlayerPrefs.SetFloat("MaxScore", travelDistance);
}
}
Además, nos aseguramos de que nuestros datos se conservan usando un valor por defecto de cero la primera vez que se ejecuta el juego.
Para mantener el interés de los jugadores, aumentar la dificultad a medida que progresan es un truco bien conocido entre los desarrolladores. Modificando el número de bloques sencillos y complicados en el manager de niveles de nuestro juego, podemos incrementar este grado de dificultad:
// Ejemplo del ajuste en el LevelManager
public void ConfigurarNiveles() {
// Un bloque sencillo por nueve complicados
List<Bloques> bloques = new List<Bloques>();
bloques.Add(bloqueSencillo);
for (int i = 0; i < 9; i++) {
bloques.Add(bloqueComplicado);
}
}
Este ajuste simple permite controlar el flujo del desafÃo presente en cada nivel, garantizando asà que los jugadores puedan experimentar un juego cada vez más retador y emocionante.
Incorporar estos enfoques fortalece el diseño de cualquier videojuego, manteniendo a los jugadores comprometidos y motivados. Con dedicación y creatividad, el potencial del diseño de videojuegos es ilimitado. ¡Adelante con tus proyectos y mantiene abiertas tus puertas al aprendizaje continuo!
Aportes 10
Preguntas 4
A tener en cuenta.
Por motivos del enseñanza se guarda el score en el PlayerPrefs, pero como ya fue dicho, este es para guardar preferencias, mas no para guardar puntajes, ni guardar partida, entre otros. Es posible? si lo es como ya lo vieron, pero no es su propósito.
Como le hago para solo tener números enteros en el Score???
.
Intente cambiar de float a int las variables correspondientes pero me marca error por que el this.transform.position.x me da como defecto un numero float (con decimales) y Unity no convierte de int a float.
Yo convertà al PlayerController en singleton a fin de cuentas, asi evitaba inicializar la variable en cada script y me ahorre un par de lineas de código
Hola te recomiendo que si tu personaje se queda pegado con las paredes esto se debe a que el collider tiene fricción esto se puede cambiar creando un physics material 2D y agregarlo a nuestro al collider de nuestro personaje, esto se crea haciendo
click izquierdo create -> physics material 2D, luego de eso si seleccionas el physics material 2D tendrás 2 casillas con números deja las 2 casillas en 0, luego arrastre este material al collider de nuestro personaje en la casilla que dice material
MaxScore. Para calcular la distancia recorrida por el jugador:
Calculamos el punto de inicio para saber el punto de fin.
La puntuación máxima la vamos a persistir en disco (fichero) - Player prebs.
Excelente clase!
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?