Проект сделан в рамках технического задания.
Задача - сделать 2D прототип, где персонаж может перемещаться вокруг прямоугольной платформы, плавно огибая углы. Грань платформы всегда является "землей" для персонажа и он не может с нее упасть. Также персонаж должен уметь прыгать.
Демонстрация:
showcase.mp4
Для реализации перемещения были выбраны Unity Splines. Замкнутый сплайн используется как путь, по которому перемещается персонаж.
Точки генерируются по часовой стрелке:
Реализация
rect-orbit-movement-demo/Assets/Scripts/Utility/RoundedRectUtility.cs
Lines 17 to 79 in fb29fd9
Для удобства интерполяции в начало добавляется новая точка, которая будет центром пути (t=0)
Реализация
rect-orbit-movement-demo/Assets/Scripts/Path/OrbPath.cs
Lines 17 to 41 in fb29fd9
В результате получается сплайн, выглядящий следующим образом:
Использование Splines позволяет реализовывать дополнительные настройки, а также работать со встроенным редактором.
Для данной задачи это одно из множества подходящих решений и, наверное, одно из самых удобных в движке Unity.
Более оптимизированым решением будет использование простой геометрии:
- Определить, к какому сегменту относится t или линейная позиция - к грани или дуге.
- Рассчитать точку на грани или дуге соответственно.