Sonic. Делаем плавную камеру в Simple Sonic Worlds

Предисловие

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

Создаем простую камеру.

Перво наперво, избавимся от обычной камеры. Для этого, де-активируем группу [CCS] Classic Camera System.

Теперь код в группе [CCS] Classic Camera System, выполнятся не будет. При запуске видим, что камера больше, не следует за игроком.

Далее сделаем так, что-бы наша камера (фрейм), следовал за игроком. Для этого, в Always эвенте, добавьте действие (Action) скролла, относительно позиции игрока.

В итоге получилось следующее

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

Что-бы исправить этот баг, нужно проверить, умер ли игрок или нет.

Если игрок умер, то в объекте Player_MovementValues, переменная Action, становится равной 9-ти (потому-что, так работает движок). То-есть, нам нужно передвигать камеру, только если, Action не равен 9 (игрок не умер).

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

Создаем плавную камеру

Создайте активный объект, он будет нашей камерой. Разместите его в любом месте.

И перепишите следующий скрипт.

В событии (эвенте) Start of Frame, я поставил камеру, в том месте, где находится игрок. И отключил классическую камеру.

Логика плавной камеры, находится в Always эвенте. Там, я перемещаю позицию камеры, используя lerp функцию, давайте разберем её подробно.

Что такое lerp?

lerp — это сокращение от Linear Interpolate, или линейная интерполяция. На практике, данная функция, делает движение более плавным.

Синтаксис функции lerp, следующий:

float lerp(from, to, percentage)
  • from — начальное значение
  • to — конечное значение
  • percentage — процент, на который увеличится from, относительно to. То-есть from, в данном случае 0%, а to будет 100%.

Приведу пример использования lerp.

lerp(10, 20, 0.5)

lerp вернет значение 15, потому что мы увеличили число 10, на 50% (0.5), относительно числа 20. В нашем случае, 20 это 100%, а 10 это 0%.

Кстати код функции lerp, выглядит так.

float lerp(float from, float to, float percentage)
{
  return from + percentage * (to - from);
}

Продолжаем разбирать камеру.

К сожалению, clickteam не поддерживает функции (у него, даже, нет языка программирования). Поэтому нужно приравнивать формулу.

from + percentage * (to - from)

К координатам X и Y камеры.

В этой формуле мы указали:

  • from — позиция камеры.
  • to — позиция игрока.
  • percentage — 0.1 (10%)

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

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

Все работает. Осталось сделать объект камеры невидимым.

Итоговый результат.