Разрушение при столкновении
Часть раздела Физика и игровой процесс путешествия по 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.
Задание
ЛегкоМяч катится к окну: клавиша со стрелкой вверх заставляет его катиться медленно, а пробел — быстро (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 окно разбивается
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Физика и игровой процесс
1Твёрдое тело
Гравитация и массаТолкаем с помощью AddForceПрыжок с импульсомFixedUpdate для физикиСкоростьКинематические телаПовторение: пусковая площадка2Столкновения
OnCollisionEnterВо что я попал?Разрушение при столкновенииСтояние на землеОтскок и трениеФормы коллайдеровПовторение: разрушаемая стена5Проект: Погоня за монетами
Катящийся мячМонеты для сбора