Приветствую! Довольно часто мы можем наблюдать в играх, реализацию различных взрывов, от которых ближлежащие объекты разлетаются в стороны от силы взрывной волны. Данный эффект можно наблюдать как в 2д играх, так и в 3д. Но в качестве примера будем использовать 3д.
Подготовка проекта
Первым делом давайте подготовим наш проект. С помощью окна Hierarchy я создал следующие объекты:
- Землю - Plane, на которой будут располагаться все объекты.
- 3д сферу - Sphere, которая должна взорваться.
- Десяток 3д кубов - Cube, которые должны разлететься в разные стороны от взрыва. Обязательно присвойте данным кубам компонент твёрдого тела, то-есть Rigidbody, иначе от взрыва они разлетаться не будут.
В окне Hierarchy и на игровой сцене это выглядит примерно так.
Скрипт
Для реализации взрыва нам необходимо создать C# скрипт, и дадим ему название, Explosion. Данный скрипт заранее присвойте нашей сфере Sphere, которая должна взорваться, и впишите в данный скрипт следующий код:
using UnityEngine;
public class Explosion : MonoBehaviour
{
public float radius = 20f;
public float force = 500f;
private void Start()
{
Explode();
}
void Explode()
{
Collider[] overlappedColliders = Physics.OverlapSphere(transform.position, radius);
for (int j = 0; j < overlappedColliders.Length; j++)
{
Rigidbody rigidbody = overlappedColliders[j].attachedRigidbody;
if (rigidbody)
{
rigidbody.AddExplosionForce(force, transform.position, radius);
}
}
Destroy(gameObject);
}
}
Вкратце разберём код:
- В строках #5-6 мы создали переменную radius, для указания радиуса взрыва. А в переменной force храним силу взрыва. Эти значения вы можете изменить как вам угодно, либо через сам скрипт, либо через окно Inspector.
- В строке #13 мы создали функцию Explode(), в которой находим все объекты, которые входят в область нашего радиуса, и заносим их в массив overlappedColliders.
- Далее пробегаем по всем элементам массива с помощью цикла, и для каждого объекта с помощью свойства attachedRigidbody проверяем, имеется ли у данного коллайдера твёрдое тело, то-есть компонент Rigidbody. Если да, то с помощью метода AddExplosionForce производим взрыв, то-есть быстрое отталкивание объекта в сторону.
- Ну а в 25 строке, мы удаляем наш шар из игровой сцены при помощи метода Destroy().
Обратите внимание, что мы исключительно ради примера, функцию Explode() вызвали сразу же при старте игры. Вызов данной функции можно произвести при каких либо условиях, например попадания пули.
Впринципе на этом можно завершить гайд по взрыву. Если гайд был полезен вам, то буду рад лайкам. А если остались вопросы, задавайте их в комментариях.