Rigidbody.AddExplosionForce
Declaration
public void AddExplosionForce(float explosionForce, Vector3 explosionPosition, float explosionRadius, float upwardsModifier = 0.0f, ForceMode mode = ForceMode.Force));Параметры
| Параметр | Описание |
|---|---|
| explosionForce | мощность взрыва (которая может изменяться в зависимости от расстояния). |
| explosionPosition | Центр сферы, в пределах которой взрыв оказывает свое воздействие. |
| explosionRadius | Радиус сферы, в пределах которой взрыв оказывает свое воздействие. |
| upwardsModifier | Корректировка видимого положения взрыва, с тем чтобы он, как представляется, поднимал предметы. |
| режим | Метод, используемый для применения силы к целям. |
Описание
Применяет силу к жесткому телу, которая имитирует эффекты взрыва.
Взрыв моделируется как сфера с определенным центром и радиусом в мировом пространстве; обычно, ничто за пределами сферы не подвергается воздействию взрыва и сила уменьшается пропорционально расстоянию от центра. Однако, если радиус равен нулю, то полная сила будет применена независимо от расстояния центра от жесткого тела.
Эта функция применяет силу к объекту в точке на поверхности жесткого тела, которая ближе всего к explosionPosition. Сила действует в направлении от explosionPosition до точки поверхности жесткого тела. Если explosionPosition находится внутри жесткого тела, или жесткое тело не имеет активных коллайдеров, то центр массы используется вместо ближайшей точки на поверхности.
Величина силы зависит от расстояния между explosionPosition и точкой, где сила была применена. По мере увеличения расстояния между explosionPosition и точкой силы, фактически примененная сила уменьшается.
Вертикальное направление силы может быть изменено с помощью upwardsModifier. Если этот параметр больше нуля, сила применяется в точке на поверхности Rigidbody, которая ближе всего к explosionPosition, но смещена вдоль оси y на отрицательное upwardsModifier. Используя этот параметр, вы можете сделать так, чтобы взрыв выглядел как бросание объектов в воздух, что может дать более драматичный эффект, чем простая внешняя сила. Сила может быть применена только к активному жесткому телу. Если GameObject неактивен, AddExplosionForce не имеет эффекта.
Примечание: Если вы используете ForceMode.Acceleration или ForceMode.VelocityChange, сила, приложенная AddExplosionForce, масштабируется по матрице тензора инерции мирового пространства.
Дополнительные ресурсы: Rigidbody.inertiaTensor
using UnityEngine;
public class Example : MonoBehaviour { [Header("Explosion Settings")] public float radius = 5.0f; public float power = 10.0f; public float upwardsModifier = 3.0f; public ForceMode forceMode = ForceMode.Force;
[Header("Optional Settings")] public LayerMask affectedLayers = ~0; // All layers by default
void Update() { ApplyExplosionForce(); } public void ApplyExplosionForce() { Vector3 explosionPosition = transform.position; Collider[] colliders = Physics.OverlapSphere(explosionPosition, radius, affectedLayers);
foreach (Collider collider in colliders) { if (collider.TryGetComponent<Rigidbody>(out Rigidbody rb)) { rb.AddExplosionForce(power, explosionPosition, radius, upwardsModifier, forceMode); } } }
void OnDrawGizmosSelected() { Gizmos.color = new Color(1f, 0.5f, 0f, 0.5f); Gizmos.DrawWireSphere(transform.position, radius); } }