Version: 2020.2
Attributes
Null Reference Exceptions

UnityEvents (Eventos de Unity)

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 UnityEvents 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 UnityEvents 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.

Utilizando UnityEvents

Para configurar un callback en el editor hay varios pasos para realizar:

  1. Asegúrese de que su script importe/utilice UnityEngine.Events.

  2. Seleccione el ícono + para agregar una casilla para su callback.

  3. Seleccione el UnityEngine.Object que usted desea recibir el callback (Usted puede utilizar el selector del objeto para esto)

  4. Seleccione la función que usted desea que sea llamada

  5. 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:

  • Estáticas. Llamadas estáticos son llamadas pre-configuradas, con valores pre-configurados que son configurados en el UI. Esto significa que cuando el callback sea invocado, la función objeto es invocada con el argumento que ha ingresado en el UI.
  • Dinámico. Llamadas dinámicas son invocadas utilizando un argumento que es enviado desde código, y este está unido al tipo de UnityEvent que está siendo invocado. El UI filtra los callbacks y solo muestra las llamadas dinámicas que son válidas para el UnityEvent.

UnityEvents Genéricos

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.

Attributes
Null Reference Exceptions