Сохранение 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);

Скрин

→ Ссылка