Привет! С вами Маргарита Шаповалова (aka KiraLinch), младший геймдизайнер студии игровой разработки OctoBox Interactive.
Освежила в памяти тему интерполяции и объяснила в заметке так, что сама еще раз поняла. Немного теории и конечно же практическое применение на примере Sky Unlimited Inc.
Надеюсь, что для непрограммистов материал окажется полезным, ну или хотя бы развлечет.
То, что выглядит как анимация, не всегда является таковой
Задача
Улучшить обратную связь, сделав заполнение прогресс-баров более плавным в прототипе Sky Unlimited Inc. Это должно помочь игроку визуально лучше фиксировать изменения параметров.
Вариант 1 — не вариант: анимация
«Ну, конечно! Можно просто сделать анимацию, ведь я умею это делать. Это легко и быстро», – подумала я и сделала. А потом подумала еще раз.
Путём простых размышлений я пришла к трём вариантам:
- никак
- с помощью чего-то, чего я пока не знаю
- другим способом
С размышлениями и вариантами я пошла к своему гуру. И гуру молвил:
«Вспомни, как двигались стулья».
Вариант 2 — вариант: Lerp
Какими способами я только не двигала стулья в Unreal. Но сила мысли и Lerp, кажется, были ответом на мой вопрос.
Lerp – это сленговое в среде программистов обозначение линейной интерполяции.
У вас есть два разных узла A и B. Представьте, что они соединены прямой линией. С шагом Alpha от точки A находится точка A1, которая показывает, насколько далеко по соединительной линии вы находитесь между узлами A и B.
Затем точка A становится точкой A1, и теперь уже новая A1 определяется с тем же шагом Alpha на меньшем отрезке. Так происходит до тех пор, пока вы асимптотически не приблизитесь к точке B, то есть A всегда стремится к B, но никогда не достигает ее фактически.
Пример из прототипа
Текущее значение параметра Эффективность равное о.3 подается на вход A. После действия игрока, по внутренней логике, число меняется и становится равным 0.4. Новое значение параметра Эффективность подается на вход B.
Устанавливаем Alpha, равное 0.1, это 10% от отрезка между A и B.
В итоге Lerp возвращает значения, равные всем промежуточным значениям между A и B c Alpha 0.1 и асимптотически достигает B.
Вот так это выглядит в итоге с Lerp с Alpha=0,1.
FInterp To Constant – это тоже интерполяция, но при заданной скорости и времени и до константы. То есть в независимости от того, какое расстояние от текущего положения к заданному предстоит преодолеть, это будет сделано с одинаковой скоростью и за одно и то же время, и гарантировано достигнет заданного значения. В отличие от FInterp To и Lerp, которые всегда приблизительно находятся возле конечной точки.
Пример из прототипа
Текущее значение параметра Эффективность равное о.3 подается на вход Current. После действия игрока по внутренней логике число меняется и становится равным 0.4. Новое значение параметра Эффективность подается на вход Target.
Устанавливаем скорость 0.25, а Delta Time берется из Event Tick, и равна одному тику.
Так это выглядит с FInterp To Constant
PS. Если вы разбираетесь в матане или программировании лучше меня, у вас есть более правильное и четкое объяснение тех тем, которых я сегодня коснулась – пожалуйста, напишите мне. Буду рада узнать что-то новое и дополнить материал.
Спасибо!
Найти меня можно
Telegram channel https://t.me/setvisibility
Discord chat https://discord.gg/8XxUUsc
Источник: DTF