Engine & platform

Как использовать сигналы Timeline

JULIEN BLAIS / UNITY TECHNOLOGIESContributor
May 21, 2019|6 Мин
Как использовать сигналы Timeline
Эта веб-страница была переведена с помощью машинного перевода для вашего удобства. Мы не можем гарантировать точность или надежность переведенного контента. Если у вас есть вопросы о точности переведенного контента, обращайтесь к официальной английской версии веб-страницы.

С момента появления Timeline в 2017 году мы знаем, что вы терпеливо ждали возможности отправлять события. Больше не ждите! Начиная с версии Unity 2019.1, новая функция под названием Signals помогает отправлять события. Давайте узнаем, что это за новая функция.

Сигналы

Вот как выглядят сигналы в окне Timeline:

Изображение

Мы создали Signals, чтобы установить канал связи между Timeline и внешними системами. Но что это значит? Почему мы выбрали именно такой подход?

Допустим, вы используете Timeline для создания cutscene. Когда сцена закончится, вы хотите загрузить новую сцену и включить систему физики. Есть несколько способов реализовать этот сценарий:

Когда сцена заканчивается, используйте пользовательские скрипты, чтобы заставить экземпляр Timeline напрямую взаимодействовать с менеджером сцен и системой физики.

Когда сцена заканчивается, создайте маркеры и сигналы, чтобы отправить сигнал "Сцена закончена" и заставить заинтересованные системы реагировать на этот сигнал.

Команда Timeline выбрала второй подход, поскольку он позволяет сохранить независимость излучателя от приемника. Их независимость обеспечивает большую гибкость, мощность и возможность повторного использования. Чтобы лучше понять это, давайте посмотрим, как разные части работают вместе.

Как все это работает вместе?

Чтобы использовать сигналы для связи с внешними системами, вам понадобятся три детали: накопитель сигнала, излучатель сигнала и приемник сигнала.

архитектура
  • Сигнальный излучатель: Эмиттер сигнала содержит ссылку на объект сигнала. На Временной шкале излучатель сигнала визуально представлен маркером. Вы можете разместить маркер на дорожке или в области "Маркеры" под линейкой Timeline.
Изображение
  • Приемник сигналов: Приемник сигналов - это компонент со списком реакций. Каждая реакция связана с активом Signal Asset.
  • Сигнальный актив: Сигнальный актив - это связь между излучателем и приемником сигнала. Вы можете повторно использовать один и тот же Signal Asset во многих экземплярах Timeline.
Пример

Это простая игра, в которой вы побеждаете зомби-кролика, нажимая на клавиши со стрелками, которые соответствуют направленным изображениям на экране:

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

В игре экземпляр GameTimeline включает в себя игровой процесс. Он использует сигналы для отображения новых направленных изображений с каждым музыкальным тактом, как показано в готовом экземпляре GameTimeline ниже:

Изображение

Чтобы продемонстрировать, как создавать и настраивать сигналы, давайте начнем с проекта, в котором не было создано ни одного сигнала. Если вы хотите проследить за ходом работы, то можете скачать проект здесь.

Во-первых, чтобы просмотреть область маркеров, в которую добавляются сигналы, щелкните значок маркера рядом с режимами редактирования клипа. Под линейкой шкалы времени появится область "Маркеры":

изображение

Чтобы добавить излучатель сигнала, щелкните правой кнопкой мыши в области маркеров и выберите Добавить излучатель сигнала.

Изображение

В области "Маркеры" появится "Излучатель сигнала":

Изображение

Излучатель сигнала, который вы только что добавили, выбран, и в окне инспектора отображаются его свойства. В окне Inspector также есть кнопки для создания других частей сигнала:

Изображение

Чтобы связать излучатель сигнала с приемником сигнала, необходимо добавить новый актив сигнала. В окне Инспектора нажмите Создать Signal..... Назовите Signal Asset "ShowKey", потому что этот Signal Asset будет использоваться для связи излучателя с приемником для изменения направленного изображения. Нажмите кнопку Сохранить, и объект Signal Asset будет добавлен в проект.

Вы также хотите, чтобы излучатель сигнала был связан с приемником сигнала, поэтому нажмите Добавить приемник сигнала. Теперь окно инспектора должно выглядеть следующим образом:

Изображение

Прежде чем продолжить, давайте остановимся и опишем, что происходит. Когда вы нажимаете кнопку Add Signal Receiver, происходит две вещи: новый компонент Signal Receiver добавляется к связанному GameObject, а новая реакция добавляется и связывается с Signal Asset, который вы только что создали. Вы можете видеть, что они связаны, потому что "ShowKey" появляется как Emit Signal и "ShowKey" добавляется в список реакций:

Изображение

В окне инспектора отображаются две вещи: свойства излучателя сигнала и реакции, определенные компонентом приемника сигнала:

Изображение

Хотя компонент приемника сигналов связан с объектом GameObject, который ассоциирован с экземпляром Timeline, вы можете редактировать приемник сигналов в окне Inspector. Реакция вызывается, когда приемник сигнала получает сигнал.

Последний шаг - указать, что делает реакция. В этом примере есть компонент Manager с методом ShowRandomKey . Этот метод отображает новую случайную клавишу со стрелкой. Чтобы реакция вызывала метод ShowRandomKey , выберите этот метод для события Unity, как показано ниже:

Изображение

Вот и все! После добавления излучателя сигнала и определения его приемника сигнала и реакции у вас теперь есть пример экземпляра Timeline, который взаимодействует со сценой.

Когда Timeline попадает на излучатель сигнала, раздается сигнал ShowKey. Приемник сигналов, который прослушивает сигнал ShowKey, вызывает метод ShowRandomKey.

Но не стоит останавливаться на достигнутом. Несколько излучателей сигнала могут излучать один и тот же сигнал. Например, в следующем экземпляре Timeline один и тот же излучатель сигнала скопирован и перемещен на разное время; для каждого музыкального такта имеется свой излучатель:

Вы также можете перетащить объект Signal Asset непосредственно из окна проекта в окно Timeline. Эмиттер сигнала создается автоматически с уже установленным свойством Emit Signal.

Чтобы посмотреть, как выглядит готовый проект со всеми сигналами, скачайте его здесь.

Подводя итог

Чтобы настроить свой первый сигнал, вам необходимо:

Щелкните правой кнопкой мыши область маркера или дорожку, поддерживающую сигналы, затем выберите Добавить излучатель сигнала...

В окне Inspector нажмите Create Signal Asset, выберите имя файла и нажмите Enter.

Все еще находясь в Инспекторе, нажмите кнопку Create Reaction... и определите реакцию, связанную с только что созданным сигналом.

FAQ по бонусам
  • Можно ли иметь несколько приемников на одном игровом объекте? Да, все приемники сигналов на игровом объекте принимают сигналы, отправленные этому игровому объекту.
  • Можно ли повторно использовать сигнальный актив в нескольких экземплярах Timeline? Да, Signal Asset можно использовать в нескольких экземплярах Timeline.
  • Можно ли расширить и настроить Signal Asset? Да, можно расширить активы сигнала, излучатель сигнала и приемник сигнала. Но это тема для другого дня; о кастомизации будет еще одна статья в блоге.
  • Гарантировано ли излучение сигналов? Да. Сигналы не будут пропущены; они будут выданы на следующем кадре, независимо от FPS игры.
  • Что произойдет, если дублировать ассет Timeline Asset, содержащий излучатели сигналов? Сигнальные излучатели сохраняют ссылку на свои сигнальные активы. Сигнальные активы не дублируются.

---

Ознакомьтесь с материалами для начинающих и продвинутых пользователей по использованию Timeline на платформе Unity Learn Premium.