Как запустить 2д объект в рандомную сторону с помощью AddForce?
Всем привет! Пытаюсь сделать механику, при которой объект будет выпускаться при появлении в рандомную сторону. Сделал это так:
rb = GetComponent<Rigidbody2D>();
Vector2 direction = new Vector2((float)Random.Range(-30, 30), (float)Random.Range(-30, 30));
rb.AddForce(direction * 4);
Но возникла проблема, direction будет равно, к примеру, 1 1, то объект будет перемещаться очень медленно, как можно сделать это лучше или исправить эту проблему?
Ответы (2 шт):
Для направления не нужно использовать ненормализованные вектора(такие, у которых длина больше 1). Рандомишь нормализованный вектор и применяешь нужную силу в этом направлении. Если каждый раз нужна разная сила, то рандомишь силу.
var direction = Random.insideUnitCircle.normalized;//рандомное нормализованное направление
_rigidbody.AddForce(direction * _force);// _force - сила, которую нужно применить к телу
Смотри, для того что бы "пнуть" объект тебе нужно приложит к нему силу имеющую направление.
Направление в нашем случае определит Vector2.
Для силы "пинка" потребуется переменная, допустим float force = 30
P.S. Если тебе нужно регулировать силу в двух осях, можно завести, либо 2 переменные:
float forceHor = 30f и float forceVer = 15f. Или обозначить тот же Vector2 forceV = (30f, 15f)
Итак, теперь дело за малым, сгенерировать случайное направление, например этой строчкой:
Vector2 dir = new Vector2(Random.Range(-1f, 1f), Random.Range(-1f, 1f));
Теперь у нас есть полностью случайное направление. Применим его к объекту:
RigidBody2d _rb //Кешируем(задаём значение) её в Start, сразу или когда потребуется.
//Если у нас 2 переменные, отвечающие за силу "пинка":
_rb.AddForce(new Vector2(dir.x * forceHor, dir.x * forceVer), forceMode.Impulse)
//Если у нас одна общая переменная:
_rb.AddForce(dir * force, forceMode.Impulse)
В данном коде у нас была переменная Vector2 dir = от -1 до 1, что по x, что по y. Конечно, объект полетит медленно, имея даже максимальные значение x = 1, y = 1. Но кто нам мешает этот вектор скорости домножить на силу "пинка". В итоге получится нормальный такой "пинок".
Надеюсь помог! Спасибо!