Leonel Grisaleña
Que lastima que hayan modificado la clase del GameManager sin mostrarlo en el video. Es dificil lo de los eventos y estas cosas no ayudan
¿Qué son los eventos en programación de videojuegos?
Los eventos son un aspecto fundamental en la programación de videojuegos. Actúan como notificaciones o señales enviadas a múltiples objetos suscritos para informarles que algo ha sucedido. En el contexto de un videojuego, los eventos nos permiten comunicar cambios o acciones a distintos elementos del entorno de manera eficiente. En esta clase exploramos cómo se utilizan para notificar la muerte de un personaje dentro del juego.
¿Cómo configuramos un evento en Unity?
Para configurar un evento en Unity, comenzamos creando un script que gestione la vida del personaje, llamado PlayerLife. Este será el encargado de determinar cuándo el personaje muere, en este caso, al colisionar con un enemigo.
// Script de ejemplo para gestionar la vida del jugador public class PlayerLife : MonoBehaviour { void OnCollisionEnter(Collision collision) { if (collision.CompareTag("Enemy")) { GameManager.PlayerKilled(); } } }
¿Cómo implementar la lógica en GameManager para manejar eventos?
Dentro del GameManager, implementamos la lógica necesaria para manejar el evento de la muerte del jugador. Creamos un método público que será invocado por el script PlayerLife.
public class GameManager : MonoBehaviour { public static event Action PlayerDeath; public static void PlayerKilled() { if (PlayerDeath != null) { PlayerDeath.Invoke(); } } }
Este método verifica si hay algo suscrito al evento PlayerDeath y lo invoca si es así. Esto permite que muchos objetos en el juego reciban la notificación.
¿Cómo suscribir otros objetos al evento?
Para suscribir objetos adicionales al evento, usamos el método Start() de los scripts respectivos. Por ejemplo, se puede suscribir un método fadein de otro script al evento PlayerDeath.
public class FadeIn : MonoBehaviour { void Start() { GameManager.PlayerDeath += FadeInEffect; } void FadeInEffect() { // Código para el efecto de fade in } }
¿Cómo se verifica el funcionamiento de los eventos?
Es crucial verificar que los eventos sean invocados y que las funciones suscritas se realicen correctamente. Al ejecutar el juego, al morir el personaje, deberíamos observar que todos los métodos suscritos al evento PlayerDeath se activen.
¿Qué se debe hacer cuando el juego termina?
Cuando el juego detecta que el jugador ha muerto, se despliega una pantalla de Game Over. Creamos una UI que contiene un panel con un mensaje y un botón para retornar al menú principal.
Creación del panel de Game Over:
Panel en la UI.ScaleMode del Canvas a ScaleWithScreenSize.TextMeshPro que diga "GameOver".Ajustes finales:
GameManager.Finalmente, aseguramos que el jugador tenga el script PlayerLife correctamente asignado y ejecutamos el juego para validar la funcionalidad. Así, podemos observar cómo múltiples funciones suscritas a un evento se ejecutan simultáneamente, facilitando la comunicación entre objetos sin dependencias directas.
¡No te pierdas la próxima clase, donde hablaremos sobre una introducción a los patrones de diseño!
Leonel Grisaleña
Que lastima que hayan modificado la clase del GameManager sin mostrarlo en el video. Es dificil lo de los eventos y estas cosas no ayudan
Juan David Rodriguez Cabrera
Los vídeos de este curso confunden un poco. De la nada agregan contenido y siguen la clase como si nada hubiera pasado, no hay continuidad
Ikal Esteban Fernández Galván
Para el game manager es mejor poner lo siguiente:
public static GameManager SharedInstance; void Awake() { if(SharedInstance == null) { SharedInstance = this; } }
de este modo solo tienes que poner para llamarlo:
GameManager.SharedInstance.<función() o variable = <valor>>;
MIGUEL TORRES VARGAS
Actualicen este curso con otro nuevo.
Juan Carlos Torres
Al parecer la clase GameManager esta un poco distinta a la de la clase anterior.
Francisco Sánchez
a mi no me funciona el game over
Daniel Sanchez
ProfesorEl Invoke se está haciendo? puedes probar a debuggear la que esté llegando a ese punto como en las primeras clases
Francisco Sánchez
no es el invoke es el panel de gameover es que cuando choco con el enemigo no pasa nada
Facundo Castro
Profe, cuando es conveniente usar los eventos? Porque con lo facil que parecen ser los usaria siempre que pueda, pero tiene alguna cosa negativa como algun costo en el rendimiento de juego o algo? Gracias.
Daniel Sanchez
ProfesorEs mucho mejor usar eventos que digamos un ciclo comprobando todo el tiempo por una variable o un cambio de estado
Facundo Castro
Gracias.
Facundo Castro
Profe esta clase parece desfasada con la anterior, hay algun video por medio que falte?
Vidal Angel Contreras Quichca
Que pasa si tengo un evento alojando varias funcione, y quiero que se ejecute la funcion de la x posición, es posible ?
Daniel Sanchez
ProfesorLa respuesta al problema tal vez no sea usar eventos si solo se quiere llamar uno de todos los alojados, pero debería ser posible navegar entre las funciones dentro del evento
Victoria Hugo Pérez Arteaga
Profesor, me parece que el id de su perfil de weather se quedó en el código que anexa a este vídeo, pero no estoy seguro
Daniel Sanchez
ProfesorHola! Gracias por notarlo! pero no te preocupes, cambié mi API Key entonces no debería haber problema :D
Sebastián Iregui
muy mal que haya modificado el game manager sin mostrarlo