Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Physics.Raycast

Объявление

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); } }
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3