Объявление
public static bool Raycast(Vector3 origin, Vector3 direction, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);Параметры
origin | Начальная точка луча в мировых координатах. |
direction | Направление луча. |
maxDistance | Максимальное расстояние, на котором луч должен проверять столкновения. |
layerMask | Маска слоя, используемая для выборочного игнорирования коллайдеров при создании луча. |
queryTriggerInteraction | Указывает, должен ли этот запрос вызывать триггеры. |
Возвращает
bool Возвращает true, если луч распространяется с коллайдером, иначе false.
Описание
Отбрасывает луч из точки начало
в направлении direction
и имеет длину maxDistance
против всех коллайдеров в сцене.
При желании вы можете указать LayerMask, чтобы отфильтровать любые коллайдеры, с которыми вы не хотите создавать коллизии.
Указание queryTriggerInteraction
позволяет вам контролировать, будут ли коллайдеры Trigger генерировать попадание или использовать глобальные Physics.queriesHitTriggers настройка.
Примечания. Raycasts не будут обнаруживать коллайдеры, для которых Raycast источник находится внутри коллайдера. Во всех этих примерах используется FixedUpdate, а не Update. См. Порядок выполнения функций событий, чтобы понять разницу между Update и FixedUpdate и посмотреть, как они соотносятся с физическими запросами.
using UnityEngine;
// C# example.
public class ExampleClass : MonoBehaviour
{
// See Order of Execution for Event Functions for information on FixedUpdate() and Update() related to physics queries
void FixedUpdate()
{
// Bit shift the index of the layer (8) to get a bit mask
int layerMask = 1 << 8;
// This would cast rays only against colliders in layer 8.
// But instead we want to collide against everything except layer 8. The ~ operator does this, it inverts a bitmask.
layerMask = ~layerMask;
RaycastHit hit;
// Does the ray intersect any objects excluding the player layer
if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out hit, Mathf.Infinity, layerMask))
{
Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * hit.distance, Color.yellow);
Debug.Log("Did Hit");
}
else
{
Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * 1000, Color.white);
Debug.Log("Did not Hit");
}
}
}
В этом примере создается простой Raycast, проецирующийся вперед от текущего положения объекта на 10 единиц.
using UnityEngine;
public class ExampleClass : MonoBehaviour
{
// See Order of Execution for Event Functions for information on FixedUpdate() and Update() related to physics queries
void FixedUpdate()
{
Vector3 fwd = transform.TransformDirection(Vector3.forward);
if (Physics.Raycast(transform.position, fwd, 10))
print("There is something in front of the object!");
}
}
Объявление
public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, float maxDistance, int layerMask, QueryTriggerInteraction queryTriggerInteraction);Параметры
origin | Начальная точка луча в мировых координатах. |
direction | Направление луча. |
hitInfo | Если возвращается значение true, hitInfo будет содержать дополнительную информацию о том, где был поражен ближайший коллайдер. (Смотрите так же: RaycastHit). |
maxDistance | Максимальное расстояние, на котором луч должен проверять столкновения. |
layerMask | Маска слоя, используемая для выборочного игнорирования коллайдеров при создании луча. |
queryTriggerInteraction | Указывает, должен ли этот запрос вызывать триггеры.. |
Возвращает
bool Возвращает true, когда луч пересекает любой коллайдер, иначе false.
Описание
Направляет луч на все коллайдеры в сцене и возвращает подробную информацию о том, что было поражено.
В этом примере отображается расстояние между текущим объектом и зарегистрированным коллайдером:
using UnityEngine;
public class RaycastExample : MonoBehaviour
{
// See Order of Execution for Event Functions for information on FixedUpdate() and Update() related to physics queries
void FixedUpdate()
{
RaycastHit hit;
if (Physics.Raycast(transform.position, -Vector3.up, out hit))
print("Found an object - distance: " + hit.distance);
}
}
В этом примере повторно вводится параметр maxDistance
, чтобы ограничить, насколько далеко вперед должен быть направлен луч:
using UnityEngine;
public class RaycastExample : MonoBehaviour
{
// See Order of Execution for Event Functions for information on FixedUpdate() and Update() related to physics queries
void FixedUpdate()
{
RaycastHit hit;
if (Physics.Raycast(transform.position, -Vector3.up, out hit, 100.0f))
print("Found an object - distance: " + hit.distance);
}
}
Объявление
public static bool Raycast(Ray ray, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);Параметры
ray | Начальная точка и направление луча. |
maxDistance | Максимальное расстояние, на котором луч должен проверять столкновения. |
layerMask | Маска слоя, используемая для выборочного игнорирования коллайдеров при создании луча. |
queryTriggerInteraction | Указывает, должен ли этот запрос вызывать триггеры. |
Возвращает
bool Возвращает true, когда луч пересекает любой коллайдер, иначе false.
Описание
То же, что и выше, но с использованием ray.origin
и ray.direction
вместо origin
и направление
.
using UnityEngine;
public class ExampleClass : MonoBehaviour
{
// See Order of Execution for Event Functions for information on FixedUpdate() and Update() related to physics queries
void FixedUpdate()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, 100))
print("Hit something!");
}
}
Объявление
public static bool Raycast(Ray ray, out RaycastHit hitInfo, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);Параметры
ray | Начальная точка и направление луча. |
hitInfo | Если возвращается значение true, hitInfo будет содержать дополнительную информацию о том, где был поражен ближайший коллайдер. (Смотрите так же: RaycastHit). |
maxDistance | Максимальное расстояние, на котором луч должен проверять столкновения. |
layerMask | Маска слоя, используемая для выборочного игнорирования коллайдеров при создании луча. |
queryTriggerInteraction | Указывает, должен ли этот запрос вызывать триггеры. |
Возвращает
bool Возвращает true, когда луч пересекает любой коллайдер, иначе false.
Описание
То же, что и выше, но с использованием ray.origin
и ray.direction
вместо origin
и направление
.
В этом примере линия рисуется по длине луча всякий раз, когда обнаруживается столкновение:
using UnityEngine;
public class ExampleClass : MonoBehaviour
{
// See Order of Execution for Event Functions for information on FixedUpdate() and Update() related to physics queries
void FixedUpdate()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 100))
Debug.DrawLine(ray.origin, hit.point);
}
}