Physics2D.Raycast
Declaration
public static RaycastHit2D Raycast(Vector2 origin, Vector2 direction, float distance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, float minDepth = -Mathf.Infinity, float maxDepth = Mathf.Infinity);Параметры
| Параметр | Описание |
|---|---|
| происхождение | Точка в пространстве 2D, откуда исходит луч. |
| направление | Вектор, представляющий направление луча. |
| расстояние | Максимальное расстояние, на которое может быть направлен луч. |
| layerMask | Фильтр для обнаружения коллайдеров только на определенных слоях. |
| minDepth | Включить только объекты с координатой Z (глубиной), большей или равной этому значению. |
| maxDepth | Включить только объекты с координатой Z (глубиной) меньше или равной этому значению. |
Возвращаемое значение
RaycastHit2D Возвращаются результаты отливки.
Описание
Бросает луч на коллайдеры в Scene.
A рейкаст Концептуально это как лазерный луч, который выстреливается из точки в пространстве в определенном направлении. Любой объект, контактирующий с лучом, может быть обнаружен и сообщен.
Эта функция возвращает объект RaycastHit2D со ссылкой на объект Collider, по которому попадает луч (свойство Collider результата будет NULL, если ничего не попало). layerMask может использоваться для выборочного обнаружения объектов только на определенных слоях (это позволяет применять обнаружение только к вражеским персонажам, например).
Перегрузки этого метода, которые используют contactFilter можно фильтровать результаты по параметрам, доступным в ContactFilter2D.
Потоки лучей полезны для определения линии обзора, целей, попадающих под огонь, и для многих других целей в игре.
Кроме того, это также обнаружит Collider(s) в начале луча. В этом случае, луч начинается внутри Collider и не пересекает поверхность Collider. Это означает, что нормаль столкновения не может быть вычислена, в этом случае возвращаемая нормаль столкновения устанавливается на обратную величину тестируемого вектора луча. Это легко обнаружить, потому что такие результаты всегда находятся в RaycastHit2D доле от нуля.
NOTE: Все результаты отсортированы в порядке возрастания расстояния i.e. первый результат является ближайшим.
Дополнительные ресурсы: LayerMask class, RaycastHit2D class, RaycastAll, Linecast, DefaultRaycastLayers, IgnoreRaycastLayer, raycastsHitTriggers.
using UnityEngine;
public class Example : MonoBehaviour { // Float a rigidbody object a set distance above a surface.
public float floatHeight; // Desired floating height. public float liftForce; // Force to apply when lifting the rigidbody. public float damping; // Force reduction proportional to speed (reduces bouncing).
Rigidbody2D rb2D;
void Start() { rb2D = GetComponent<Rigidbody2D>(); }
void FixedUpdate() { // Cast a ray straight down. RaycastHit2D hit = Physics2D.Raycast(transform.position, -Vector2.up);
// If it hits something... if (hit) { // Calculate the distance from the surface and the "error" relative // to the floating height. float distance = Mathf.Abs(hit.point.y - transform.position.y); float heightError = floatHeight - distance;
// The force is proportional to the height error, but we remove a part of it // according to the object's speed. float force = liftForce * heightError - rb2D.linearVelocity.y * damping;
// Apply the force to the rigidbody. rb2D.AddForce(Vector3.up * force); } } }
Declaration
public static int Raycast(Vector2 origin, Vector2 direction, ContactFilter2D contactFilter, RaycastHit2D[] results, float distance = Mathf.Infinity);Параметры
| Параметр | Описание |
|---|---|
| происхождение | Точка в пространстве 2D, откуда исходит луч. |
| направление | Вектор, представляющий направление луча. |
| contactFilter | Контактный фильтр используется для фильтрации результатов по-разному, например, по маске слоя, глубине Z или нормальному углу. |
| результаты | Массив для получения результатов. Размер массива определяет максимальное количество результатов, которые могут быть возвращены. |
| расстояние | Максимальное расстояние, на которое может быть направлен луч. |
Возвращаемое значение
инт Возвращает число результатов, помещенных в массив results.
Описание
Бросает луч на коллайдеры в Scene.
Эта функция возвращает число найденных контактов и помещает эти контакты в массив results. Результаты также могут быть отфильтрованы по contactFilter.
NOTE: Все результаты сортируются в порядке возрастания расстояния i.e. первый результат является ближайшим.
Дополнительные ресурсы: ContactFilter2D и RaycastHit2D.
Declaration
public static int Raycast(Vector2 origin, Vector2 direction, ContactFilter2D contactFilter, List<RaycastHit2D> results, float distance = Mathf.Infinity);Параметры
| Параметр | Описание |
|---|---|
| происхождение | Точка в пространстве 2D, откуда исходит луч. |
| направление | Вектор, представляющий направление луча. |
| contactFilter | Контактный фильтр используется для фильтрации результатов по-разному, например, по маске слоя, глубине Z или нормальному углу. |
| результаты | Список для получения результатов. |
| расстояние | Максимальное расстояние, на которое может быть направлен луч. |
Возвращаемое значение
инт Возвращает число результатов, помещенных в список results.
Описание
Бросает луч на коллайдеры в Scene.
Возвращаемое целое число представляет собой число результатов, записанных в список results. Список результатов будет изменен, если в нем не будет достаточно элементов для отображения всех результатов. Это предотвращает выделение памяти для результатов, когда список results не нуждается в изменении размера, и повышает производительность сбора мусора, когда запрос выполняется часто.
Результаты также могут быть отфильтрованы по contactFilter.
NOTE: Все результаты сортируются по возрастающему расстоянию i.e. первый результат является ближайшим.
Дополнительные ресурсы: ContactFilter2D и RaycastHit2D.