Объявление
public static int RaycastNonAlloc(Ray ray, RaycastHit[] results, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);Параметры
ray | Начальная точка и направление луча. |
results | Буфер для хранения обращений. |
maxDistance | Максимальное расстояние, на которое может попасть rayhit от начала луча. |
layerMask | Маска слоя, используемая для выборочного игнорирования коллайдеров при создании луча. |
queryTriggerInteraction | Указывает, должен ли этот запрос вызывать триггеры. |
Возвращает
int Количество обращений, сохраненных в буфере results
.
Описание
Пропустить луч через сцену и сохранить попадания в буфер.
Аналогичен Physics.RaycastAll, но не создает мусора.
Запрос raycast завершается, когда больше нет совпадений и/или буфер результатов заполнен. Порядок результатов не определен. Когда возвращается полный буфер, не гарантируется, что результаты будут ближайшими совпадениями, и возвращается длина буфера. Если передан нулевой буфер, результаты не возвращаются и не выдаются ошибки или исключения.
Объявление
public static int RaycastNonAlloc(Vector3 origin, Vector3 direction, RaycastHit[] results, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);Параметры
origin | Начальная точка и направление луча. |
results | Буфер для хранения обращений. |
direction | Направление луча. |
maxDistance | Максимальное расстояние, на которое может попасть rayhit от начала луча. |
queryTriggerInteraction | Указывает, должен ли этот запрос вызывать триггеры. |
layerMask | Маска слоя, используемая для выборочного игнорирования коллайдеров при создании луча. |
Возвращает
int Количество обращений, сохраненных в буфере results
.
Описание
Пропустить луч через сцену и сохранить попадания в буфер.
using UnityEngine;
public class ExampleClass : MonoBehaviour
{
// Размер массива определяет, сколько рейкастов будет происходить
RaycastHit[] m_Results = new RaycastHit[5];
// See Order of Execution for Event Functions for information on FixedUpdate() and Update() related to physics queries
void FixedUpdate()
{
// Установить маску слоя на все слои
var layerMask = ~0;
int hits = Physics.RaycastNonAlloc(transform.position, transform.forward, m_Results, Mathf.Infinity, layerMask);
for (int i = 0; i < hits; i++)
{
Debug.Log("Hit " + m_Results[i].collider.gameObject.name);
}
if (hits == 0)
{
Debug.Log("Did not hit");
}
}
}