Разрушение при столкновении
Часть раздела Физика и игровой процесс путешествия по Unity на Coddy. Урок 10 из 71.
Насколько сильным был удар? 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.
Задание
ЛегкоНапиши Window.cs: каждый удар ослабляет окно, а при значении 0 оно разбивается.
- В
OnCollisionEnterокна вычитайcollision.relativeVelocity.magnitudeизstrength. - Когда
strength <= 0f, вызовиDestroy(gameObject);.
Нажми «Играть», запускай мягкие шары клавишей со стрелкой вверх, затем сильный шар клавишей Space: окно разобьётся. Затем нажми «Проверить».
Попробуйте сами
using UnityEngine;
public class Window : MonoBehaviour
{
public float strength = 10f;
// При каждом ударе скорость столкновения вычитается из strength; когда strength достигает 0, окно разбивается
}
Все уроки раздела Физика и игровой процесс
1Твёрдое тело
Гравитация и массаТолкаем с помощью AddForceПрыжок с импульсомFixedUpdate для физикиСкоростьКинематические телаПовторение: пусковая площадка4Корутины
InvokeInvokeRepeating, CancelInvokeВаша первая корутинаЦиклы в корутинахОстановка корутинПовторение: обратный отсчёт10Проект: Побег с арены
АренаОхотники2Столкновения
OnCollisionEnterВо что я попал?Разрушение при столкновенииСтояние на землеОтскок и трениеФормы коллайдеровПовторение: разрушаемая стена5Проект: Монетная гонка
Катящийся шарСобираем монетыПотренируйтесь самостоятельно: Песочница Unity