Сохранение velocity по модулю при столкновении Unity 2D
Есть 3 объекта которым я задаю случайное направление и скорость:
public float MaximumImpulseAtDirection = 1;
void Start()
{
float xImpulse = Random.Range(-MaximumImpulseAtDirection, MaximumImpulseAtDirection);
float yImpulse = Random.Range(-MaximumImpulseAtDirection, MaximumImpulseAtDirection);
GetComponent<Rigidbody2D>().velocity = new Vector2(xImpulse, yImpulse);
}
Проблема в том, что когда они сталкиваются, то замедляются, и в итоге вовсе останавливаются
Я хочу, чтобы их "импульс" сохранялся (не знаю, как это по другому назвать)
Ответы (1 шт):
Автор решения: AC Studio
→ Ссылка
Если я правильно понял то в каждом Rigidbody нужно поставить в Collision Detection>Continuous что бы они не проходили сквозь коллайдеры, так же можно по желанию добавить физический материал (Physics Material 2D) и в физическом материале добавить минимум отскоков в Bounciness 0.01, это так для на всякий случай. Или не использовать velocity а AddForce:
GetComponent<Rigidbody2D>().AddForce (new Vector2(xImpulse, yImpulse));
Или
GetComponent<Rigidbody2D>().AddForce(new Vector2(xImpulse, yImpulse),ForceMode2D.Impulse);

