Physics.OverlapSphereNonAlloc
Declaration
public static int OverlapSphereNonAlloc(Vector3 position, float radius, Collider[] results, int layerMask = AllLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);Параметры
| Параметр | Описание |
|---|---|
| должность | Центр сферы. |
| радиус | Радиус сферы. |
| результаты | Буфер для хранения результатов. |
| layerMask | Маска слоя Маска слоя определяет, какие слои коллайдеров включить в запрос. |
| queryTriggerInteraction | Указывает, должен ли этот запрос вызывать триггеры. |
Возвращаемое значение
инт Возвращает количество коллайдеров, хранящихся в буфере results.
Описание
Рассчитывает и хранит коллайдеры, касающиеся или находящиеся внутри сферы, в предоставленном буфере.
Не пытается увеличить буфер, если у него заканчивается пространство. Длина буфера возвращается, когда буфер заполнен. Как Physics.OverlapSphere, но не генерирует мусор. Дополнительные ресурсы: Physics.AllLayers.
using UnityEngine;
public class ExampleClass : MonoBehaviour { // Declare hitColliders as a reusable field. private Collider[] hitColliders;
// Set the maximum number of colliders that can be detected at once. private const int maxColliders = 10;
void Awake() { // Initialize the array just once. hitColliders = new Collider[maxColliders]; }
void ExplosionDamage(Vector3 center, float radius) { // Reuse the pre-allocated array for Physics.OverlapSphereNonAlloc. int numColliders = Physics.OverlapSphereNonAlloc(center, radius, hitColliders);
// Iterate through detected colliders and send the AddDamage message. for (int i = 0; i < numColliders; i++) { hitColliders[i].SendMessage("AddDamage"); } } }
Дополнительные ресурсы: Схема лучевой проекции с разделом слоев Использование слоев в Unity.