@Toshegg

Как двигать объект по окружности, используя rigidbody?

Здравствуйте!
Возникла такая проблема: я делаю симуляцию частицы, и мне нужно, чтобы по клику мыши частица, если она находится в заданном радиусе, начинала вращаться вокруг указателя мыши. Я нашел решение, где движение происходит за счет изменения transform.position:

if (Input.GetMouseButton (1)) {
			timer += Time.deltaTime;
			transform.position = new Vector3 (2*Mathf.Cos(Mathf.Deg2Rad*timer), 2*Mathf.Sin(Mathf.Deg2Rad*timer), 0);
		}


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

Идеально было бы сделать это через AddForce.

Надо добавить, что все действие происходит в двумерной плоскости.

Буду благодарен, если вы поможете с написанием кода!
  • Вопрос задан
  • 5301 просмотр
Решения вопроса 2
BasmanovDaniil
@BasmanovDaniil
Геймдизайнер-телепат
Сначала тащите частицу к мышке, а когда она будет достаточно близко, тащите её по касательной нужной орбиты.
var toMouse = mousePosition - rigidbody.position;
if (toMouse.sqrMagnitude > sqrRadius)
{
    rigidbody.AddForce(toMouse);
}
else
{
    var velocity = rigidbody.velocity;
    Vector3.OrthoNormalize(ref toMouse, ref velocity);
    rigidbody.AddForce(velocity);
}

Vector3.OrthoNormalize даст вам направление касательной, возможно потребуется указать бинормаль.
Ответ написан
Эм... это обычная школьная физика...
Вычисляем вектор от частицы к точке нажатия и воздействуем силой в этом направлении.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы