Menu
CoddyTech

Разрушение при столкновении

Часть раздела Физика и игровой процесс путешествия по Unity на Coddy. Урок 10 из 63.

Насколько сильным был удар? collision.relativeVelocity показывает, с какой скоростью два объекта сближались друг с другом в момент столкновения, а его magnitude — это скорость удара в м/с. Это разность скоростей: автомобиль, движущийся со скоростью 10 м/с и врезавшийся в автомобиль, едущий в том же направлении со скоростью 8 м/с, ударит со скоростью всего 2 м/с, и оба автомобиля получат одинаковое значение скорости удара.

Это яйцо разбивается, когда приземляется со скоростью выше crackSpeed. При падении с высоты 1 м оно ударяется со скоростью около 4.4 м/с (квадратный корень из 2 x 9.81 x 1), а с высоты 2 м — около 6.3 м/с:

public float crackSpeed = 5f;

void OnCollisionEnter(Collision collision)
{
    if (collision.relativeVelocity.magnitude > crackSpeed)
    {
        Debug.Log("Splat!");
        Destroy(gameObject);
    }
}

Почему не использовать собственную rb.linearVelocity яйца? К моменту вызова OnCollisionEnter физика уже обработала столкновение, поэтому скорость яйца — это то, что осталось после него, и она близка к нулю. relativeVelocity сохраняет скорость самого удара. Это скорость, поэтому масса не играет роли: тяжёлое и лёгкое яйцо, приземлившиеся со скоростью 6 м/с, сообщат об одинаковой скорости — 6.

challenge icon

Задание

Легко

Мяч катится к окну: клавиша со стрелкой вверх заставляет его катиться медленно, а пробел — быстро (Bowler.cs уже написан). Напиши Window.cs. У окна есть strength (10 в Inspector).

  • Каждое попадание ослабляет окно на величину скорости удара: удар со скоростью 2 м/с уменьшает strength на 2.
  • Когда strength становится равным 0 или меньше, окно разбивается: уничтожь окно.

Нажми Play, запусти несколько медленных мячей, а затем быстрый, после чего нажми Check.

Попробуйте сами

using UnityEngine;

public class Window : MonoBehaviour
{
    public float strength = 10f;

    // Каждый удар уменьшает strength на величину скорости столкновения; при 0 окно разбивается
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Физика и игровой процесс