В Unity есть такая сцена в 3D:
Розовый шар двигается с постоянной скоростью, при столкновении со стеной и препятствиями рикошетит.
Вот настройки компонента RigidBody шарика
На стенах и препятствиях висит Box Collider, нету RigidBody.
Ниже прикрепляю код который висит на шаре и отвечает за движение шарика и рикошет.
public float startSpeed;
public float increasedStep;
public float maxSpeed;
private void FixedUpdate()
{
rb.velocity = direction * startSpeed;
}
private void OnCollisionEnter(Collision other)
{
ContactPoint contactPoint = other.contacts[0];
direction = Vector3.Reflect(direction, contactPoint.normal);
if(startSpeed + increasedStep > maxSpeed) return;
startSpeed += increasedStep;
}
Проблема в следующем: шарик не всегда двигается с постоянной скоростью, это видно так же в speed в разделе Info компонента RigidBody шарика. В некоторых ситуациях скорость шара меняется(почти всегда снижается), например когда шарик близко и параллельно передвигается рядом стены или когда сталкивается прямо в угол препятствия.
Вопрос: как получить правильное стабильное физическое поведение шарика?
Дополнительно: пробовал не использовать физику для передвижений, однако такую практику насколько я знаю не стоит применять, когда нужны считать столкновения с другими объектами, тем более часто. Результат был хуже. Траектории рикошета часто не верные, иногда шар двигается по кругу например.