Conviene haber comprendido Interfaces, genéricos y contratos.
Avanza en orden. Cada lección está redactada para Palta es Cool, utiliza ejemplos propios y termina con una actividad cuya respuesta puedes desplegar.
Ubícate antes de avanzar
Al terminar deberías poder relacionar Delegados y lambdas con Eventos y UnityEvent y resolver un caso nuevo.
Reserva entre 75 y 120 minutos o divide el laboratorio en dos sesiones.
Instala Unity Hub, una versión LTS compatible y un IDE con integración para C#. Conserva un proyecto de laboratorio separado.
Abrir la guía de herramientas →Diagnóstico rápido: ¿cómo se relacionan Delegados y lambdas y Eventos y UnityEvent? +
No necesitas acertar todavía. Escribe una hipótesis de dos líneas y compárala con tu respuesta al finalizar; si puedes corregirla y justificar el cambio, hubo aprendizaje.
Aprende el tema paso a paso
Usarás funciones como valores y notificaciones para desacoplar emisores y receptores sin perder control sobre firma, ciclo de vida y trazabilidad.
- Delegate, Action y Func describen firmas de funciones
- event protege la emisión y UnityEvent permite configurar receptores
- Toda suscripción necesita propietario y momento de liberación
Delegate, Action y Func describen firmas de funciones
Un delegado puede referirse a métodos compatibles. Action no devuelve valor; Func devuelve el tipo indicado al final. Las lambdas sirven para operaciones breves, pero una función con nombre comunica mejor una regla compleja.
La firma define parámetros y retorno.
La invocación debe contemplar ausencia de suscriptores.
Una lambda no debe esconder efectos difíciles de rastrear.
¿Cuál es la diferencia esencial entre Action<int> y Func<int, bool>?
Mostrar respuesta +
Action<int> recibe un entero y no devuelve valor; Func<int, bool> recibe un entero y devuelve un booleano.
event protege la emisión y UnityEvent permite configurar receptores
Un event de C# solo puede invocarse desde la clase que lo declara y ofrece buena trazabilidad en código. UnityEvent se serializa y conecta desde Inspector, útil para respuestas de diseño, aunque añade sobrecarga y puede ocultar enlaces.
Usa event para lógica interna y contratos de código.
Usa UnityEvent cuando la conexión editable aporta valor real.
Documenta quién emite, con qué datos y cuándo.
¿Por qué un event es más seguro que exponer públicamente un delegate?
Mostrar respuesta +
Los consumidores pueden suscribirse o retirarse, pero no reemplazar la lista ni invocar el evento desde fuera del emisor.
Toda suscripción necesita propietario y momento de liberación
OnEnable y OnDisable funcionan bien para objetos que entran y salen de participación. Suscribirse con una lambda anónima dificulta retirar exactamente la misma función. Los eventos no sustituyen el diseño del flujo: un exceso puede volver invisible la causalidad.
Suscripción y retirada deben ser simétricas.
Evita registrar el mismo callback más de una vez.
Incluye contexto y datos suficientes en la notificación.
¿Por qué no puedes retirar fácilmente modelo.Cambio -= x => Refrescar(x)?
Mostrar respuesta +
Porque crea otra instancia de delegado; no es la misma que se registró. Usa un método con nombre o conserva el delegado en un campo.
Tu recorrido en tres ideas
- Delegate, Action y Func describen firmas de funciones
- event protege la emisión y UnityEvent permite configurar receptores
- Toda suscripción necesita propietario y momento de liberación
Construye un sistema de vida dirigido por eventos
Integra propiedad del estado, emisión, datos del evento, ciclo del receptor y pruebas contra duplicados.
HUD, audio y logros deben reaccionar a la vida sin que Salud los conozca ni invoque directamente.
Procedimiento
- Define la invariante de vida y el evento con datos suficientes.
- Conecta receptores en OnEnable y retíralos en OnDisable.
- Aplica daño, cura, desactiva y reactiva cada receptor varias veces.
Evidencia mínima
- Conteo de invocaciones por cambio.
- Vida siempre entre cero y máximo.
- El emisor no referencia tipos de UI, audio o logros.
Mostrar razonamiento modelo +
Salud modifica primero su estado válido y luego emite una notificación. Cada receptor controla su suscripción. El test comprueba tanto valores como que reactivar no multiplique llamadas.
Para ir más lejos¿Cuándo un flujo directo sería más claro que agregar otro evento?
Comprueba que puedes usarlo
Antes de continuar, revisa estos tropiezos frecuentes y resuelve un caso sin copiar los ejemplos.
Exponer un delegate público que cualquier consumidor pueda reemplazar o invocar.
Suscribir lambdas anónimas sin conservarlas y luego no poder retirarlas.
Ahora hazlo sin guía
Haz que salud publique cambios y conecta HUD, audio y logro sin que el emisor conozca a sus receptores.
Mostrar pauta de corrección +
- El evento incluye los datos suficientes y solo lo invoca su propietario.
- La suscripción es simétrica durante activación y desactivación.
- Reactivar receptores no duplica llamadas y el flujo puede rastrearse.
