UnityEvents это способ позволяющий поддерживать управляемую пользователем функцию обратного вызова от момента редактирования до момента запуска без необходимости дополнительного программирования и конфигурации скриптов.
UnityEvents полезны для целого ряда вещей:
Содержит управляемую пользователем функцию обратного вызова
Системы связей
Постоянная функция обратного вызова
Предварительно настроенные события вызова
UnityEvents могут быть добавлены к любому MonoBehavior и вызываться в коде как стандартные .net делегаты. После добавления UnityEvent в MonoBehaviour, оно отобразится в инспекторе и можно будет добавлять постоянные функции обратного вызова.
UnityEvent
s have similar limitations to standard delegates. That is, they hold references to the element that is the target and this stops the target being garbage collected. If you have a UnityEngine.Object as the target and the native representation disappears the callback will not be invoked.
Вот несколько шагов по настройке обратного вызова в редакторе:
Убедитесь, что ваш скрипт использует пространство имён UnityEngine.Events
.
Выберите иконку +, чтобы добавить слот для функции обратного вызова
Выберите объект UnityEngine.Object к которому вы хотите обратиться посредством функции обратного вызова (Для этого вы можете использовать селектор объектов)
Выберите функцию, которую вы хотите вызвать
Вы можете добавить больше одной функции обратного вызова к событию
Во время настройки UnityEvent в инспекторе, вам доступно два типа функций вызова:
Статические вызовы, это - пред настроенные вызовы с предустановленными значениями, которые настраиваются в UI(пользовательском интерфейсе). Это означает, что при срабатывании функции обратного вызова, целевая функция вызывается с аргументами предварительно введенными в UI. Динамические вызовы при срабатывании используют аргументы получаемые из кода, и ограничены типом вызванного UnityEvent. UI фильтрует функции обратного вызова и показывает только те динамические вызовы, которые действительны для данного UnityEvent.
Общие UnityEvents
По умолчанию UnityEvent в Monobehaviour связывает динамически функции без аргументов. Это не обязательно должно быть так, потому что UnityEvents поддерживает связь функций содержащих до 4-х аргументов. Чтобы сделать это, вам необходимо переопределить стандартный класс UnityEvents как поддерживающий множественные аргументы. Сделать это довольно просто:
[Serializable]
public class StringEvent : UnityEvent <string> {}
By adding an instance of this to your class instead of the base UnityEvent
it will allow the callback to bind dynamically to string functions.
Потом это может быть вызвано с помощью вызова функции Invoke со ‘строкой(string)’ в качестве аргумента.
UnityEvents могут быть переопределены с наличием до 4-х аргументов в их общем определении.