Згадуємо геометрію. Рівняння кола має вигляд:
a, b - координати центру кола
R - радіус кола
Рівняння кола радіуса R з центром на початку координат:
Це допоможе нам дізнатися змінні в іншому поданні окружності: в параметричному рівнянні:
в центрі координат:
Бачимо знайомі дані і ще додаткову: alpha. Думаю зрозуміло, що це кут. Міняємо кут альфа і отримуємо рух по колу.
Все це переносимо в Unity.
Припустимо в якийсь момент часу потрібно, щоб об'єкт почав рух по колу, а значить потрібно змінювати поступово кут і передавати значення в координати. Кут можна змінювати наприклад в Update. який буде кожен фрейм викликатися. Тоді вийде проста формула:
Коли потрібно припинити рух по колу, виставляємо isCircle в false і Обнуляємо кут angle = 0;
Для руху навколо якогось центру не забуваємо додати цю умову в координати. Наприклад центр з координатами 1, 1.5; Формула буде наприклад така:
За годинниковою або проти годинникової?
Тут все банально просто. Потрібно одну з координат помножити додатково на -1. Якщо помножити X, то рух піде так, як ніби перебуваєте на позначці 180 °
Якщо помножити Y, то з позначки 0 °:
Якщо я нічого не плутаю))
Ось банальне і в дуже сирому вигляді рух тіла вперед, а при зміні параметра isCircle в true летить проти годинникової стрілки рівно з того місця, де знаходиться (для цього у формулі ще один параметр new Vector2 (radius, 0) для компенсації напрямку руху).
Ну і з приводу руху по синусоїді. Тут трохи по-іншому. За однією осі ми просто рухаємося, а по інший, так би мовити "Віхляєв".
Я спробую просто написати дві формули, спробуйте розібратися з ними самі)))
1) Рух вперед, "вихляет" вниз-вгору: