Цель: понять силу источников сигналов на временной шкале.

Излучатели сигналов, по сути, позволяют нам вызывать события в наших сценариях в определенные моменты на нашей временной шкале. Это дает нам гораздо больше свободы в нашем редакторе, чтобы что-то происходило в заданное время из нашего кода.

Сначала я создам пустой объект Временная шкала, затем режиссер (который будет содержать Игровой директор), а затем добавьте две сферы в директор как дочерние.

Далее я собираюсь создать отдельный скрипт для каждой из этих сфер. Я также буду называть их Sphere01 и Sphere02. Затем я добавлю к каждому из них простую функцию Debug.Log. Мне нужно создать это внутри общедоступного метода, чтобы работать. Подробнее об этом чуть позже.

Затем я перетащу две свои сферы как дорожки активации в редактор временной шкалы. Затем я хочу нажать кнопку Маркер (выглядит как булавка), и это покажет вкладку моего маркера, которая позволит мне добавить мои излучатели сигналов.

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

Вы можете видеть, что в инспекторе есть «Создать сигнал» и «Добавить приемник сигнала». Нам нужно будет сделать и то, и другое.

Во-первых, давайте Создадим сигнал и сохраним его как SphereSignal. Затем выберите Добавить приемник сигнала в директор.

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

Затем я перетащу Sphere01 в поле, чтобы использовать функциюsphere01, которую я создал в скрипте. Вот почему мне нужно было сделать метод общедоступным.

Далее я собираюсь сделать то же самое со сферой_02.

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

Теперь мы можем нажать кнопку воспроизведения, и наша отладка отобразится на консоли!

Вы можете видеть силу этого! Теперь с помощью излучателей сигналов мы можем вызывать определенные функции из нашего кода для выполнения в определенных точках. Мы можем включить/отключить bools или попросить игрока выполнить часть своего кода в определенных точках, например, сделать так, чтобы босс появлялся в определенной точке. Варианты безграничны!

Мы также можем использовать излучатели сигналов, чтобы изменить наше воспроизведение. Для этого создадим новый скрипт и назовем его воспроизведение. Прикрепите этот скрипт к игровому объекту Director.

В этом скрипте нам нужно будет получить доступ к движку Director. Просто введите using UnityEngine.Playables;

Во-первых, давайте создадим новую переменную PlayableDirector и GetComponent в Пуске, чтобы мы могли получить доступ к этому компоненту.

Теперь давайте создадим новый общедоступный метод. Это будет функция, которая позволит нам PauseTimeline. Мы просто воспользуемся функцией Pause().

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

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

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

Теперь, когда я нажму P, он продолжит воспроизведение.

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

Для этого мы создадим переменную с плавающей запятой с именем _timeToAdvance.

Я просто собираюсь использовать функцию «время» в своем сценарии Воспроизведение.

Здесь вы увидите, что когда клавиша нажимается после паузы, она переходит к 5-секундной отметке.

Мы могли бы использовать это для создания цикла в определенном разделе временной шкалы.

Мы будем использовать очень похожий код.

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

Теперь наш цикл будет продолжаться до тех пор, пока мы не напишем какой-нибудь скрипт, чтобы разорвать цикл, например, простой bool.

Вы можете видеть, как это может быть ценным во многих случаях!

Изменение сцен с помощью излучателя сигнала временной шкалы

Во-первых, мы должны создать новую сцену. Затем в нашем сценарии мы должны использовать пространство имен SceneManagement.

Затем мы создадим общедоступный метод и заставим его менять сцены.

Не забудьте создать свои излучатели и приемники.

И теперь, если мы хотим, чтобы наша сцена изменилась в конце ролика, мы всегда можем это использовать!