Объявление
public static RaycastHit2D Raycast(Vector2 origin, Vector2 direction, float distance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, float minDepth = -Mathf.Infinity, float maxDepth = Mathf.Infinity);Параметры
origin | Точка в 2D-пространстве, где начинается луч. |
direction | Вектор, представляющий направление луча. |
distance | Максимальное расстояние, на которое может быть направлен луч. |
layerMask | Фильтр для обнаружения коллайдеров только на определенных слоях. |
minDepth | Включает только объекты с координатой Z (глубиной) больше или равной этому значению. |
maxDepth | Включает только объекты с координатой Z (глубиной) меньше или равной этому значению. |
Возвращает
RaycastHit2D Результаты броска возвращены
Описание
Направляет луч на коллайдеры в сцене.
Raycast концептуально похож на лазерный луч, испускаемый из точки в пространстве в определенном направлении. Любой объект, соприкасающийся с лучом, может быть обнаружен и сообщен.
Эта функция возвращает объект RaycastHit со ссылкой на коллайдер, в который попал луч (свойство результата коллайдера будет равно NULL, если ничего не попало). layerMask можно использовать для выборочного обнаружения объектов только на определенных слоях (например, это позволяет применять обнаружение только к вражеским персонажам).
Перегрузки этого метода, использующие contactFilter
, могут фильтровать результаты с помощью параметров, доступных в ContactFilter2D.
Рейкасты полезны для определения линии прямой видимости, целей, пораженных огнестрельным оружием, и для многих других целей в игровом процессе.
Кроме того, это также обнаружит коллайдер(ы) в начале луча. В этом случае луч начинается внутри коллайдера и не пересекает поверхность коллайдера. Это означает, что нормаль столкновения не может быть вычислена, и в этом случае возвращаемая нормаль столкновения устанавливается на обратную проверяемому вектору луча. Это легко обнаружить, поскольку такие результаты всегда имеют долю RaycastHit2D, равную нулю.
Смотрите так же: 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.collider != null)
{
// 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.velocity.y * damping;
// Apply the force to the rigidbody.
rb2D.AddForce(Vector3.up * force);
}
}
}
Объявление
public static int Raycast(Vector2 origin, Vector2 direction, ContactFilter2D contactFilter, RaycastHit2D[] results, float distance = Mathf.Infinity);Параметры
origin | Точка в 2D-пространстве, откуда исходит луч. |
direction | Вектор, представляющий направление луча. |
contactFilter | Контактный фильтр, используемый для различной фильтрации результатов, например, по маске слоя, глубине Z или нормальному углу. |
results | Массив для получения результатов. Размер массива определяет максимальное количество результатов, которые могут быть возвращены. |
distance | Максимальное расстояние, на которое может быть направлен луч. |
Возвращает
intВозвращает количество результатов, помещенных в массив results
.
Описание
Направляет луч на коллайдеры в сцене.
Raycast концептуально похож на лазерный луч, испускаемый из точки в пространстве в определенном направлении. Любой объект, вступивший в контакт с лучом, может быть обнаружен и отправлен в отчет.
Эта функция возвращает количество найденных контактов и помещает эти контакты в массив results
. Результаты также можно отфильтровать с помощью contactFilter
.
Смотрите так же: ContactFilter2D and RaycastHit2D.
Объявление
public static int Raycast(Vector2 origin, Vector2 direction, ContactFilter2D contactFilter, ListПараметры
origin | Tточка в 2D пространстве, откуда исходит луч. |
direction | Вектор, представляющий направление луча. |
contactFilter | Контактный фильтр, используемый для различной фильтрации результатов, например, по маске слоя, глубине Z или нормальному углу. |
results | Список для получения результатов. |
distance | Максимальное расстояние, на которое можно бросить луч. |
Возвращает
int Возвращает количество результатов, помещенных в список results
.
Описание
Направляет луч на коллайдеры в сцене.
Raycast концептуально похож на лазерный луч, испускаемый из точки в пространстве в определенном направлении. Любой коллайдер, вступивший в контакт с лучом, может быть обнаружен и отправлен в отчет.
Целое возвращаемое значение — это количество результатов, записанных в список results
. Список результатов будет изменен, если он не содержит достаточного количества элементов для отчета обо всех результатах. Это предотвращает выделение памяти для результатов, когда нет необходимости изменять размер списка results
, и повышает производительность сборки мусора при частом выполнении запроса.
Результаты также можно отфильтровать с помощью contactFilter
.
Смотрите так же: ContactFilter2D and RaycastHit2D.