Los UnityEvents son maneras de permitirle a los callbacks hechos por el usuario a ser persistidos desde un tiempo de edición a un tiempo de ejecución sin la necesidad de programación adicional y configuración de script.
Los UnityEvents son útiles para un número de cosas:
Callbacks guiados por Contenido (Content Driven Callbacks)
Sistemas de desacoplamiento
Callbacks persistentes
Eventos de llamada Preconfigurados
Los UnityEvent
s pueden ser agregados a cualquier MonoBehaviour
y son ejecutados desde código como un .net delegado estándar. Cuando UnityEvent
es agregado a un MonoBehaviour
éste aparece en el Inspector y callbacks persistentes pueden ser agregados.
Los UnityEvent
s tienen limitaciones similares a delegates estándar. Esto es, ellos mantienen referencias al elemento que es el objetivo y esto para que el objetivo sea recogido por el garbage collector. Si usted tiene un UnityEngine.Object como el objetivo y la representación nativa desaparece el callback no será invocado.
Para configurar un callback en el editor hay varios pasos para realizar:
Asegúrese de que su script importe/utilice UnityEngine.Events
.
Seleccione el ícono + para agregar una casilla para su callback.
Seleccione el UnityEngine.Object que usted desea recibir el callback (Usted puede utilizar el selector del objeto para esto)
Seleccione la función que usted desea que sea llamada
Usted puede agregar más de un callback para el evento
Cuando configure un UnityEvent
en el Inspector hay dos tipos de llamadas a funciones que son soportadas:
Por defecto un UnityEvent
en un Monobehaviour
se une de forma dinámica a una función void. Éste no debe ser el caso debido a que la invocación dinámica de los UnityEvents soportan la union a funciones con más de 4 argumentos. Para hacer esto, usted necesita definir una clase personalizada UnityEvent
que soporte múltiples argumentos. Esto es muy fácil de hacer:
[Serializable]
public class StringEvent : UnityEvent <string> {}
Al agregar una instancia de esto a su clase en vez del base UnityEvent
, esto le va a permitir el callback a que se una dinámicamente a funciones string.
Esto puede luego ser invocado al agregar la función Invoke()
con un string
como argumento.
Los UnityEvents pueden ser definidos hasta con 4 argumentos en su definición genérica.