El personaje y el controlador

1

Introducción: De la idea al desarrollo

2

Estructura de carpetas en Unity

3

Assets, Game Objects y Sprite Atlas

4

Animaciones desde un sprite map

5

Animation Controller y Transiciones

6

Plataformas y gravedad

7

Física en Unity

8

El script de control

9

Programando funciones en C# y Unity: Jump

10

Detectar el suelo con Raycast

11

Herramientas de debugging visual

12

Cambiar las animaciones según los estados

13

Reto: Terminando nuestras animaciones

14

Solución del reto

15

Hacer que el personaje camine

El manager del videojuego

16

Cómo funciona el Game Manager

17

El Singleton

18

El modo de juego

19

Input manager y juegos multiplataforma

20

Corrección del Bug del salto

21

La zona de muerte

22

Reiniciar la partida

23

Corrigiendo los bugs al reiniciar nuestro juego

Diseño procedural de niveles 2D

24

El diseño de niveles a mano

25

Configurando nuestros assets para el diseño procedural

26

Generación procedural de niveles

27

Creando la zona que eliminará bloques del nivel excedentes

28

Añadir un nuevo bloque de forma aleatoria

29

La cámara que sigue al jugador

30

Destrucción de bloques antiguos

31

Terminando de programar la destrucción de bloques antiguos

32

Solucionando el salto de la cámara al reiniciar el juego

HUD, menús y gameplay

33

El canvas en Unity

34

Uso de botones para crear un menú

35

La lógica de los menús

36

Ejercicio: Preparando el menú del juego

37

Programando el menú del juego

38

Los coleccionables del juego

39

Actualizar UI de coleccionables

40

Iniciando con pociones y maná

41

Pociones de vida y maná

42

Programando las barras de vida y maná

43

Calculando los puntajes con la distancia y el tiempo de juego

44

La lógica del maná

Enemigos y dificultad

45

Plataformas móviles

46

Iniciar movimiento de la plataforma con trigger

47

Enemigos móviles

48

Enemigos móviles: preparando nuestro enemigo para girar

49

Enemigos móviles: programando que fire al chocar

50

Arreglando el collider de nuestra roca

51

Programando la condición de muerte del personaje

52

Añadiendo música de fondo a nuestro videojuego

53

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

Curso de C# para Videojuegos

Curso de C# para Videojuegos

Juan Gabriel Gomila

Juan Gabriel Gomila

Destrucción de bloques antiguos

30/53
Recursos

Aportes 11

Preguntas 3

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.

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.