Объявление
public void AddExplosionForce(float explosionForce, Vector3 explosionPosition, float explosionRadius, float upwardsModifier = 0.0f, ForceMode mode = ForceMode.Force));Параметры
explosionForce | Сила взрыва (которая может изменяться в зависимости от расстояния). |
explosionPosition | Центр сферы, внутри которой действует взрыв. |
explosionRadius | Радиус сферы, в пределах которой действует взрыв. |
upwardsModifier | Корректировка видимого положения взрыва, чтобы казалось, что он поднимает объекты. |
mode | Метод, используемый для применения силы к своим целям. |
Описание
Применяет силу к твердому телу, имитирующую эффекты взрыва.
Взрыв моделируется сферой с определенным положением центра и радиусом в мировом пространстве; обычно взрыв не затрагивает все, что находится за пределами сферы, и сила уменьшается пропорционально расстоянию от центра. Однако если для радиуса задано нулевое значение, то будет применена полная сила независимо от того, насколько далеко центр находится от твердого тела.
Эта функция применяет силу к объекту в точке на поверхности твердого тела, ближайшей к explosionPosition
. Сила действует в направлении от explosionPosition
до точки поверхности твердого тела. Если explosionPosition
находится внутри твердого тела или у твердого тела нет активных коллайдеров, то вместо ближайшей точки на поверхности используется центр масс.
Величина силы зависит от расстояния между explosionPosition
и точкой приложения силы. По мере увеличения расстояния между explosionPosition
и точкой силы фактическая приложенная сила уменьшается.
Вертикальное направление силы можно изменить с помощью upwardsModifier
. Если этот параметр больше нуля, сила прикладывается к точке на поверхности Rigidbody, ближайшей к explosionPosition
, но смещенной по оси Y на минус upwardsModifier
. Используя этот параметр, вы можете создать впечатление, что взрыв подбрасывает объекты в воздух, что может дать более драматический эффект, чем просто направленная наружу сила.
Силу можно приложить только к активному твердому телу. Если GameObject неактивен, AddExplosionForce не действует.
using UnityEngine;
using System.Collections;
// Применяет силу взрыва ко всем ближайшим твердым телам
public class ExampleClass : MonoBehaviour
{
public float radius = 5.0F;
public float power = 10.0F;
void Start()
{
Vector3 explosionPos = transform.position;
Collider[] colliders = Physics.OverlapSphere(explosionPos, radius);
foreach (Collider hit in colliders)
{
Rigidbody rb = hit.GetComponent<Rigidbody>();
if (rb != null)
rb.AddExplosionForce(power, explosionPos, radius, 3.0F);
}
}
}