Начальная кат сцена / Cut scene - Unity легко

Начальная кат сцена / Cut scene - Unity легко14:22

Информация о загрузке и деталях видео Начальная кат сцена / Cut scene - Unity легко

Автор:

Graphical Design

Дата публикации:

22.05.2020

Просмотров:

51K

Транскрибация видео

Доброго времени суток.

Я видел в комментариях, что многие просили создать урок по катсценам.

И вот настал тот момент.

Причем эта катсцена может быть максимально универсальной.

Это может быть как начальная катсцена, так и катсцена внутри игры.

Но я покажу на примере начальной.

Использовать я буду таймлайн.

Способов создания катсцен много, но это вот мой вариант.

У меня есть вот такая небольшая сценка, где у меня персонаж может двигаться.

Может бегать, прыгать.

Все как в обычном проекте.

Что надо бы сделать сейчас?

Я в иерархии нажму правой кнопкой Create Inti.

И назову его Timeline Manager.

Он будет отвечать как раз непосредственно за катсцену.

На него я добавлю компонент PlayableDirector.

Он как раз сможет записать информацию, которую надо будет проиграть.

Обязательно должна быть включена галочка Play on Awake, потому что в этом случае получится именно начальная катсцена.

Если вы делаете не начальную катсцену, эта галочка должна быть отключена.

И этот элемент надо будет просто вызывать в нужный момент.

Окей, в ассетах правой кнопкой мыши я создам фолдер, папку, которую назову Timeline.

В ней правой кнопкой мыши создам непосредственно Timeline.

И назову cutscene.

Сюда можно сохранять разные cutscenes и запускать их при необходимости.

Теперь в иерархе я выберу timeline manager и у него есть вот эта пустая ячейка playable.

То есть что должно проиграться.

Вот эту cutscene, которую в ассетах я создал, я и перетащу в эту ячейку.

Все.

То есть этот элемент, timeline manager, будет запускать cutscene, которую мы создали.

Пока еще не записано в конце ничего, но сейчас это исправим.

Заходим вверху в Windows.

Заходим в секвенции.

И тут выбираем Timeline.

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

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

Так будет чуть-чуть удобнее.

Так, самый отличный вариант.

Так, в таймлайне нажмем плюсик.

И вот тут мы можем выбрать, что здесь можно создавать.

Думаю, о самом таймлайне можно чуть больше почитать в документации Unity.

Или я потом как-то создам отдельный урок по всем-всем возможностям таймлайна.

Но нам понадобятся не все отсюда, а только некоторые пункты.

Сначала я выберу трек групп.

Назову этот трек групп...

player track сюда я смогу записать непосредственно движение своего персонажа так и я создам наверно еще одну трек группу которую назову other track другие элементы которые могут двигаться или смогут появляться добавим сюда тоже что-то так в player треки нажимаю плюсик и выбираю что этот player трек будет себе нести нести он себе будет анимацию поэтому выберу animation track

Вот появилась анимация, нам надо перетащить в ячейку этой анимации, что будет анимироваться.

Соответственно, я выберу своего персонажа из иерархии и перетащу в ячейку None.

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

И в моем случае, да, я выберу создание этого аниматора.

Если у вас уже был аниматор на персонаже, он в этот момент ничего не спросит.

Хорошо, что нам надо делать дальше?

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

И есть запись.

Вот запись как раз мне сейчас и нужна.

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

Я если его передвигаю, видно, что на шкале появился ключ.

Такой ромбик, он называется ключами.

А в трансформации положение и вращение покраснело.

Это значит, что ключ анимации записан.

Я передвигаю куда-то на следующий кадр, передвину своего персонажика.

Это действие тоже записалось, это видно на шкале.

Появился еще один ключ, еще один ромбик.

И, например, я поменяю ему скейл.

Наверное, здесь сначала укажу 1.

Чуть дальше передвину, зафиксирую положение.

Просто изменив его чуть-чуть.

И еще дальше поменяю скейл на минус 1.

Типа, чтобы он посмотрел в левую сторону.

Опять передвигаю бегунок.

Минус 1 все еще оставим.

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

То есть все-таки базовые движения.

Вы можете сделать что угодно для теста.

Попередвигать его, поперемещать.

Не принципиально.

Теперь если я это протестирую.

Мой персонаж идет, поворачивается влево, поворачивается вправо.

Все.

Такие базовые действия записаны.

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

Если его нажать, то откроется вот такой граф-эдитор, в котором можно перемещать непосредственно элементы, которые относятся к ключам.

Я их могу выделить.

Передвинуть.

И соответственно мой персонаж будет увеличиваться, уменьшаться.

То есть все, что я сделаю с этим граф-эдитором, все можно исправить.

И если ключи стоят ближе к друг другу, анимация проигрывается быстрее.

Если двигаю дальше, анимация двигается медленнее.

И вот тут можно чуть-чуть поднастроить это все.

Вот, повороты будут чуть-чуть быстрее.

Хорошо, это подправили.

Добавим что-то в следующий трек.

Я хочу добавить всплывающее окошко, в котором будет что-то написано.

Поэтому в иерархии я нажму правой кнопкой мыши, выберу UI Canvas.

Сделаю Canvas Screen Space Camera и помещу в ячейку None непосредственно камеру.

Все, Canvas будет ровно посередине моего экрана.

Так, правой кнопкой мыши на Canvas, UI Canvas.

Image.

Вот будет такой базовый прямоугольник белый.

Я его поставлю чуть выше.

И поставлю в него текст.

Правой кнопкой мыши на Image.

UI Text.

Поставлю его по центру.

Напишу что-то.

Например, где я. Увеличу окошко, чтобы записывать туда информацию чуть побольше.

Вот.

Все.

И я хочу, чтобы этот блок появлялся.

Хорошо.

Я его изначально отключу.

То есть мне не надо, чтобы он был виден со самого старта.

Выберу снова Timeline Manager и включу вот этот трек.

Но для этого я выберу не Animation Track, так как мне не надо ничего анимировать.

А я выберу Activation Track.

То есть активация чего-то во время какого-то этапа.

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

Вот оно.

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

Я его передвину правее и, наверное, чуть-чуть укорочу.

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

Вот, где я?

Поехали, можно протестить, кстати.

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

Все классно.

Что бы я еще хотел, так это чтобы в конце этот блок с текстом пропал.

Я не хочу, чтобы он отображался всегда.

Поэтому я выберу вот этот блок под «Other track».

И у меня справа появятся параметры.

И там вот значение, единственный параметр, который есть.

PostPlaybackState.

То есть состояние после того, как все проигралось.

И здесь надо указать, что должно стать InActive.

Я это окошко должен отключить после того, как проигрыш пройдет.

Я нажимаю play, персонаж двигается, окошко появляется, окошко исчезло и я могу управлять персонажем после этого всего.

Все, у меня все работает.

Я могу прыгать, бегать, все делать, что мне необходимо.

Все, игра началась.

И по идее у вас все сейчас должно работать.

Все классно, все круто.

Но, откуда же еще вот эти несколько минут видео?

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

Вот как бы там странно не звучало, все работает, но не все работает.

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

Или он стоял на месте, мог поворачиваться, но все равно не мог еще смещаться.

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

Для этого понадобится сделать небольшой скрипт.

Я нажму правой кнопкой Create Script.

И назову его Timeline Manager.

В нем будет небольшой фикс.

Запускаем его.

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

Дальше в переменных.

boolFix, который равен false.

То есть изначально это не должно ничего работать.

То есть ничего не работает, потому что у нас проигрывается сам таймлайн.

Следующая переменная.

PublicAnimatorPlayerAnim.

То есть это непосредственно ссылка на аниматор персонажа.

Дальше Public RuntimeAnimatorControl, который назовем PlayerControl, типа Control.

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

И еще одна переменная Public PlayableDirector, которую назовем Director.

Это непосредственно компонент самой анимации, самой катсцены.

Что нам надо указать при старте?

PlayerControl равняется PlayerAnime.RuntimeAnimatorControl.

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

PlayerAnim.RuntimeAnimatorControl равняется 0.

То есть при старте я не могу контролировать.

Мой полный контроль является 0.

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

Но, наверное, я выберу здесь не Start, а поставлю метод OnEnable.

То есть если мы активны, то есть если все работает.

В данном случае катсцена.

Хорошо, в апдейте надо указать следующее, if директор.state равняется playstate.playing, это значит, что если в нашем таймлайне вот этот вот плейбл директор, его состояние является проигрышем, в данном случае значит проигрывается,

Но, наверное, правильнее бы указать не проигрывается.

Поэтому я поставлю перед равно восклицательный знак.

То есть, если у нас закончился проигрыш.

Вот playStatePlaying указывает на то, что у нас идет проигрыш.

Восклицательный знак равно не идет проигрыш.

У нас закончился проигрыш.

Хорошо.

И...

не fix то есть у нас fix является фолсовым чтобы у нас сработало это все единожды нужен как раз этот fix если он будет трушным то все уже чтобы там не происходило это действие не будет запускаться то внутри мы пишем что fix равняется true то есть все он станет трушным playerAnim.RuntimeAnimatorControl равняется

PlayerControl.

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

Дальше мне надо этот скрипт перенести на элемент в иерархии TimelineManager.

Вот он тут поместился.

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

В PlayerAnim перетаскиваем персонажа.

То есть что будет включать контроль, либо что выключать контроль.

Соответственно у нашего персонажа.

Дальше директор.

Сюда перетаскиваем плейбл директор.

Третью ячейку можно не трогать.

На самом деле вот этих контролей может быть несколько.

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

И теперь, если нажать play, по сути будет в моем случае то же самое.

Но у вас даже если не происходило ничего, не двигался персонаж, он начнет двигаться.

Вот такой небольшой фикс, который можно применить в случае, если у вас что-то не работает.

А на этом, пожалуй, все.

Если вам понравилось видео, вы хотите угостить меня кофейком, ссылки будут в описании.

А также заходите в Discord канал, в котором вы можете пообщаться с такими же разработчиками, как и вы.

И также ставьте лайк, подписывайтесь на канал и увидимся в следующих видео.