Как сделать бесшовный переход к геймплею

При разработке Divinest Light я уделяю очень много внимания иммерсивности не только геймплея, но и элементам UI, таким как главное меню.

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

Пример:

Анимация перехода к геймплею в Divinest Light.

Мало того, что это выглядит интересно, так ещё и прекрасно встраивается в нарратив Divinest Light, где по сюжету герой буквально спускается с небес на землю с помощью таинственного луча.

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

Сразу предупрежу, что моя игра — это 2D платформер, а не ААА шутер. Не думаю, что бесшовную загрузку можно будет с легкостью провернуть в огромной 3D игре.

Анимация

Сначала я сделал анимацию падения героя. В конце она плавно перетекает в базовую анимацию Idle, откуда начинаются геймплейные анимации. Это легко достигается с помощью Animator, где можно объединять разные анимации линиями, а Unity уже сам плавно сделает переход.

Animator главного героя. Триггеры позволяют делать переходы между анимациями в определенные моменты.
Animator главного героя. Триггеры позволяют делать переходы между анимациями в определенные моменты.

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

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

Анимация падения персонажа покадрово. Красным обведено анимационное событие (Animation Event).
Анимация падения персонажа покадрово. Красным обведено анимационное событие (Animation Event).

Код

Самое главное, чтобы на разные чекпоинты можно было загрузиться одной анимацией, а не делать все вручную, ведь чекпоинтов у меня уже больше 10! Для этого нужно написать небольшой скрипт, который будет принимать номер чекпоинта, который нужно загрузить из главного меню, а затем уже перемещать персонажа на необходимую локацию и включать анимацию падения.

Функция перемещения персонажа на желаемый чекпоинт.
Функция перемещения персонажа на желаемый чекпоинт.

На самом деле, этот С# код довольно простой. По сути, он перемещает героя и окружение вокруг него по горизонтали на определённую точку на уровне, откуда уже начинается снижение и переход к геймплею. Уровень можно быть хоть сколько длинным, а чекпоинтов хоть бесконечно количество, и это будет работать.

Код в конце функции перемещения персонажа.
Код в конце функции перемещения персонажа.

Вот так выглядит та же анимация на другом чекпоинте:

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

В завершение

Вот таким нехитрым способом я реализовал бесшовный переход между меню и геймплеем в Divinest Light. Примерно также вы можете реализовать бесшовный переход в своей 2D игре, немного видоизменяя код и, конечно же, анимации.

Cпасибо за внимание!

4242
13 комментариев

Комментарий недоступен

18
Ответить

Небольшое замечание:
Переход не ощущается плавным. Я бы сделал появление/скрытие меню выбора уровня плавным.
Дальше после выбора уровня пусть элементы главного меню остаются (если это уже другая сцена, то имитируй наличие главного меню на ней). Убери их тоже плавно. Можно одновременно с анимацией падения.

4
Ответить

Полностью согласен. 

Игра пока в разработке и я добавлю эти анимации к выходу.

Ответить

Комментарий недоступен

3
Ответить

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

1
Ответить

Очень круто получается)

1
Ответить