Как правильно настроить физику шарика в Unity?

В Unity есть такая сцена в 3D:
61db0805064e6787591980.png
Розовый шар двигается с постоянной скоростью, при столкновении со стеной и препятствиями рикошетит.

Вот настройки компонента RigidBody шарика
61db0610a342b764584670.png
На стенах и препятствиях висит 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 шарика. В некоторых ситуациях скорость шара меняется(почти всегда снижается), например когда шарик близко и параллельно передвигается рядом стены или когда сталкивается прямо в угол препятствия.

Вопрос: как получить правильное стабильное физическое поведение шарика?

Дополнительно: пробовал не использовать физику для передвижений, однако такую практику насколько я знаю не стоит применять, когда нужны считать столкновения с другими объектами, тем более часто. Результат был хуже. Траектории рикошета часто не верные, иногда шар двигается по кругу например.
  • Вопрос задан
  • 375 просмотров
Решения вопроса 1
GavriKos
@GavriKos Куратор тега Unity
Ну есть еще такая штука как PhysicMaterial. Который как раз отвечает за трение, упругость и прочее.

Но если у вас именно постоянная скорость - то я бы реально не использовал физику для движения, а только детектил ею столкновения.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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