UnityEvents — это способ, позволяющий сохранять управляемый пользователем обратный вызов от времени редактирования до времени выполнения без необходимости дополнительного программирования и настройки скрипта.
UnityEvents полезны по ряду причин:
- Обратные вызовы на основе содержания
- Системы развязки
- Постоянные обратные вызовы
- Предварительно настроенные события звонков
UnityEvent
могут быть добавлены к любому MonoBehaviour
и выполняются из кода, как стандартный делегат .net. Когда UnityEvent
добавляется к MonoBehaviour
, оно появляется в InspectorОкно Unity, в котором отображается информация о текущем выбранном игровом объекте, активе или настройках проекта, что позволяет вам проверять и редактировать значения. Дополнительная информация
См. в Словарь, и можно добавить постоянные обратные вызовы.
UnityEvent
имеют те же ограничения, что и стандартные делегаты. То есть они содержат ссылки на элемент, который является целью, и это останавливает сборку мусора. Если у вас есть UnityEngine.Object в качестве цели, а собственное представление исчезает, обратный вызов не будет вызываться.
Использование UnityEvents
Чтобы настроить обратный вызов в редакторе, необходимо выполнить несколько шагов:
Убедитесь, что ваш скрипт импортирует/использует
UnityEngine.Events
.Нажмите значок +, чтобы добавить слот для обратного вызова
Выберите объект UnityEngine.Object, для которого вы хотите получить обратный вызов (для этого можно использовать селектор объектов)
Выберите функцию, которую вы хотите вызывать
Вы можете добавить несколько обратных вызовов для события
При настройке UnityEvent
в Инспекторе поддерживаются два типа вызовов функций:
- Статический. Статические вызовы – это предварительно настроенные вызовы с предварительно настроенными значениями, заданными в UI(пользовательский интерфейс). Позволяет пользователю взаимодействовать с вашим приложением. . Подробнее
См. в Словарь. Это означает, что при вызове обратного вызова целевая функция вызывается с аргументом, введенным в пользовательский интерфейс. - Динамический. Динамические вызовы вызываются с использованием аргумента, который отправляется из кода, и он привязан к вызываемому типу UnityEvent. Пользовательский интерфейс фильтрует обратные вызовы и отображает только те динамические вызовы, которые допустимы для события UnityEvent.
Общие события Unity
По умолчанию UnityEvent
в Monobehaviour
динамически связывается с функцией void. Это не обязательно, так как динамический вызов UnityEvents поддерживает привязку к функциям с 4 аргументами. Для этого вам нужно определить собственный класс UnityEvent
, который поддерживает несколько аргументов. Это довольно легко сделать:
[Serializable]
public class StringEvent : UnityEvent {}
Добавив экземпляр this в свой класс вместо базового UnityEvent
, вы позволите обратному вызову динамически связываться со строковыми функциями.
Затем его можно вызвать, вызвав функцию Invoke()
с строкой
в качестве аргумента.
События UnityEvents могут быть определены с использованием до 4 аргументов в общем определении.