Observer
Clase 28 de 32 • Curso de Programación 2D con Unity: Intermedio
Resumen
¿Qué es el patrón Observer en programación de videojuegos?
El patrón Observer es esencial en el desarrollo de videojuegos, permitiendo que múltiples objetos reaccionen de manera coordinada ante cambios en un objeto específico, llamado "sujeto". Este patrón se utiliza cuando es necesario mantener sincronizadas varias partes del sistema sin acoplarlas fuertemente. Es similar a los eventos y delegados en programación, permitiendo que las funciones respondan a cambios específicos. A menudo se implementa para modificar aspectos como el puntaje del jugador cuando determinadas acciones ocurren en el juego.
¿Cómo se implementa el patrón Observer en Unity?
La implementación del patrón Observer en Unity se puede lograr a través de los siguientes pasos:
-
Creación de un script de comportamiento para las balas:
- Se crea un script de C# llamado
BulletBehavior
. - Se requiere un componente
RigidBody2D
. - Durante el
Start
, se asigna el valor delRigidBody2D
. - Se define una velocidad en el
FixedUpdate
para asegurar que la bala siempre se mueva hacia adelante.
[RequiredComponent(typeof(RigidBody2D))] public class BulletBehavior : MonoBehaviour { private RigidBody2D rb; public float speed; void Start() { rb = GetComponent<RigidBody2D>(); } void FixedUpdate() { rb.velocity = transform.up * speed; } }
- Se crea un script de C# llamado
-
Ajuste de la rotación en el
PlayerController
:- Se modifica el script para que las balas se generen con la rotación actual del avión.
Transform.Rotation = Transform.Rotation;
-
Interacción y reacción de los enemigos al ser alcanzados:
- En el script
EnemyLife
, implementar lógica que permita que los enemigos reaccionen cuando una bala los golpee. - Se utiliza comparación de etiquetas para verificar el impacto de una bala.
if (collision.CompareTag("bullet")) { // Lógica para destruir o desactivar objeto }
- En el script
-
Gestión de eventos y puntaje mediante el GameManager:
- Se crea un
Action
llamadoonUpdateScore
para gestionar el puntaje. - Tanto los enemigos, como el
GameManager
, se suscriben y se desuscriben al evento. - El
GameManager
se encarga de actualizar la interfaz gráfica relacionada al puntaje.
public static Action onUpdateScore; void OnEnable() { onUpdateScore += UpdateScoreUI; } void OnDisable() { onUpdateScore -= UpdateScoreUI; } void UpdateScoreUI() { Debug.Log("Score actualizado"); }
- Se crea un
¿Cómo perfeccionar este diseño e integrar el Object Pooling?
Integrar el Object Pooling
optimiza la gestión de recursos del juego. Este patrón permite reusar objetos (balas, enemigos, explosiones) sin necesidad de crear o destruir instancias constantemente, mejorando el rendimiento.
- Desactivar en lugar de destruir: Modificar las acciones para desactivar objetos en vez de destruirlos.
- Reuso de explosiones y otros objetos: Configurar las explosiones para ser parte del sistema
Object Pooling
.
¿Qué reto debes asumir tras aprender esta implementación?
El desafío propuesto es crear un Singleton de UI que reciba y maneje eventos vinculados al cambio de puntaje. Además, la modificación de explosiones para utilizar el Object Pooling
fortalece conocimientos en patrones de diseño y mejora el rendimiento del juego. ¡Sigue practicando e implementando estos patrones y verás cómo tus habilidades en desarrollo de videojuegos se potencian significativamente!