Una alternativa mas amistosa y con una mejora en rendimiento es cambiar la condición. collision.tag == "Player" Por Collision.CompareTag("Player")
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 fire 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
Aportes 11
Preguntas 3
Una alternativa mas amistosa y con una mejora en rendimiento es cambiar la condición. collision.tag == "Player" Por Collision.CompareTag("Player")
Mucho OJO, a mi teniendo el Player con 2 colliders (tal y como lo tiene Juan Gabriel, el collider de cápsula y el de caja para los pies), me detectaba dos colisiones con el ExitPoint y me borraba los 2 LevelBlock
Solución dejar al Player con 1 solo collider, por ejemplo el de capsula ;=)
Un desafío de las clases anteriores era programar que nuestro personaje pudiera ir no solo hacia adelante sino también hacia atrás, pero, ¿cómo podríamos ir atrás si destruimos los bloques inmediatamente después de superarlos? 🤔
Si queremos destruir los componentes con delay, la misma función “Destroy” recibe como 2do parámetro un float para ese delay.
Destroy(oldBlock, 1f);
Importante, me dio un error de index o algo así. Creía que por alguna razón todos los bloques se eliminaba por un error en el código pero resultó ser que la lista de todos los bloques iniciales a los cuales debemos arrastrar los prefabs de los niveles se había vaciado quién sabe por qué, solo los volví a arrastrar y ya estaba funcionando perfecto
Cada clase que avanzo me doy cuenta de que voy comprendiendo mejor la sintaxis de C# y lo mejor de todo, aprendiendo a interpretarla haciendo mis propios comentarios en el código.
public void RemoveLevelBlock() //Metodo para eliminar bloque de nivel
{
/*Dentro del método RemoveBlock hemos instanciado la clase LevelBlock con la variable oldBlock
* en el elemento 0 del array CurrentLevelBlocks.
* Invocamos el método Remove para que elimine el OldBlock en la posición 0 del Array,
* de manera que cuando se elimine el bloque 0, el bloque siguiente pasará a ser el elemento 0
* del Array (Lista de bloques en Unity) y así sucesivamente con todos los bloques.
* Por último hemos invocado el método Destroy para que destruya de la pantalla de juego
* el GameObject instanciado y llamado OldBlock.*/
LevelBlock oldBlock = CurrentLevelBlocks[0];
CurrentLevelBlocks.Remove(oldBlock);
Destroy(oldBlock.gameObject);
}
Solemos hacer uso de bucle while cuando no sabemos la cantidad de iteraciones que queremos que se ejecute algo.
Tener en cuenta que al estar destruyendo y generando constantemente, hace que sea un mayor esfuerzo para el procesador.
Por eso el Patron de diseño Object Pool trata de reciclar los recursos.
Genial
Excelente clase, todo funciona a la perfección.
Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.