База знаний ЯЮниор
  • C#
    • 🗃️Ссылочные и значимые типы в C# Ключевые слова ref, out, in Что нужно знать новичку
    • 📋Использование констант
    • 🔖Snippet или фрагмент кода
    • 📝Пустые строки
    • 🛡️Инкапсуляция
  • Unity
    • 🚶‍♂️Управление Параметрами Аниматора
    • ⚙️Динамическое изменение объектов
      • 🛠️Создание объектов
      • 🪛Изменение объектов
      • 🪚Добавление и изменение компонентов
      • 🔥Удаление объектов и компонентов
    • 🔊События
      • 🧬Параметризация
      • 🔗Совмещение событий
      • 📡Action и UnityAction
      • 🕹️UnityEvent
    • 🔌Подключение среды разработки к Unity
    • ⌚Корутины
      • 🪄Управление корутинами
      • ⏰Yield Instruction
      • 🕵️‍♂️Как устроены корутины?
  • Git и GitHub
    • 🗃️Git
    • 🗄️GitHub
    • 🖥️GitHub Desktop
Powered by GitBook
On this page
  • Что такое UnityEvent?
  • Зачем был создан UnityEvent?
  • Как объявить UnityEvent?
  • Синтаксис UnityEvent

Was this helpful?

  1. Unity
  2. События

UnityEvent

Автор: Дмитрий Прокопьев

PreviousAction и UnityActionNextПодключение среды разработки к Unity

Last updated 1 year ago

Was this helpful?

Что такое UnityEvent?

UnityEvent это класс Unity, который выполняет роль декоратора для стандартных событий. Это значит, что UnityEvent не является событием с точки зрения языка (так как не является делегатом). Вместо этого он содержит событие в себе и предоставляет публичный интерфейс для работы с ним. Говоря иначе, это класс-обертка для реальных событий.

Зачем был создан UnityEvent?

Возникает вопрос, зачем он тогда нужен? Все дело в сериализации - механизме, позволяющем Unity отображать данные в инспекторе. Unity не может вытащить из обычных делегатов данные, которые ему нужно отобразить в инспекторе, сделать это технически почти невозможно. Поэтому при работе с инспектором ему требуется своя обертка.

Можно сделать вывод, что UnityEvent нужен только для работы с событиями через инспектор.

Как объявить UnityEvent?

Продолжим разбирать пример с кошельком. Предположим, что после сохранения количества денег игроку необходимо показать иконку сохранения. Чтобы сделать это, нам потребуется запустить эффект после сохранения - это можно сделать через UnityEvent. Так как UnityEvent нужен для работы через инспектор, то и настраивать его мы будем в инспекторе:

[SerializeField] private UnityEvent _saved;

Нет встроенных механизмов, которые могут инкапсулировать UnityEvent и сделать его безопасным для передачи из вне, поэтому его предпочтительно держать приватным. Если все таки требуется работать с ним из других компонентов, как это сделать рассказано .

Синтаксис UnityEvent

Вызвать UnityEvent можно с помощью метода Invoke. Проверку на null в этом случае делать не требуется (так как не делегат), нужно только убедиться, что UnityEvent был инициализирован - он либо сериализованное поле, либо мы явно вызвали конструктор.

_saved.Invoke();

Так как UnityEvent не является делегатом, к нему нельзя применить операторы += и -=. Вместо них в UnityEvent присутствуют методы AddListener и RemoveListener. В большинстве случаев мы настраиваем UnityEvent через инспектор

🔊
🕹️
здесь