Unity 6.3
0 онлайн 76 гостей 3 в системе
Вход

Physics.Raycast

Declaration

public static bool Raycast(Vector3 origin, Vector3 direction, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);

Параметры

Параметр Описание
происхождение Начальная точка луча в мировых координатах.
направление Направление луча.
maxDistance Максимальное расстояние, на котором луч должен проверять столкновения.
layerMask Маска слоя Маска слоя, которая используется для выборочного фильтрования коллайдеров, рассматриваемых при создании луча.
queryTriggerInteraction Указывает, должен ли этот запрос вызывать триггеры.

Возвращаемое значение

логическое Возвращает true, если луч пересекается с Collider, иначе false.

Описание

Отправляет из точки originв направлении directionлуч длиной maxDistanceна все коллайдеры в Scene.

Чтобы выбрать слои, с которыми должен столкнуться луч, используйте LayerMask.

Определение queryTriggerInteraction позволяет вам управлять тем, генерируют ли коллайдеры Trigger попадание, или использовать глобальное Physics.queriesHitTriggers установка.

Примечания: Потоки Лучей не будут обнаруживать Коллайдеры, для которых источник Потока Лучей находится внутри Collider. Во всех этих примерах FixedUpdate используется вместо UpdateСм. Порядок выполнения функций событий чтобы понять разницу между Update и FixedUpdate, и посмотреть, как они связаны с физическими запросами.

using UnityEngine;

public class ExampleClass : MonoBehaviour { LayerMask layerMask;

void Awake() { layerMask = LayerMask.GetMask("Wall", "Character"); }

// See Order of Execution for Event Functions for information on FixedUpdate() and Update() related to physics queries void FixedUpdate() {

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!"); } }

Declaration

public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, float maxDistance, int layerMask, QueryTriggerInteraction queryTriggerInteraction);

Параметры

Параметр Описание
происхождение Начальная точка луча в мировых координатах.
направление Направление луча.
hitInfo Если вернётся true, hitInfo будет содержать больше информации о том, где ударился ближайший коллайдер. (Дополнительные ресурсы: RaycastHit).
maxDistance Максимальное расстояние, на котором луч должен проверять столкновения.
layerMask Маска слоя Маска слоя, которая используется для выборочного фильтрования коллайдеров, рассматриваемых при создании луча.
queryTriggerInteraction Указывает, должен ли этот запрос вызывать триггеры.

Возвращаемое значение

логическое Возвращает true, если луч пересекает любой коллайдер, иначе false.

Описание

Пропускает луч по всем коллайдерам в Scene и возвращает подробную информацию о том, что было поражено.

Этот пример показывает расстояние между текущим объектом и сообщенным Collider:

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); } }

Declaration

public static bool Raycast(Ray ray, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);

Параметры

Параметр Описание
луч Начальная точка и направление луча.
maxDistance Максимальное расстояние, на котором луч должен проверять столкновения.
layerMask Маска слоя Маска слоя, которая используется для выборочного фильтрования коллайдеров, рассматриваемых при создании луча.
queryTriggerInteraction Указывает, должен ли этот запрос вызывать триггеры.

Возвращаемое значение

логическое Возвращает true, если луч пересекает любой коллайдер, иначе false.

Описание

То же самое, что выше, используя ray.origin и ray.direction вместо origin и direction.

using UnityEngine;
using UnityEngine.InputSystem;
                        
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(Mouse.current.position.ReadValue());
        if (Physics.Raycast(ray, 100))
            print("Hit something!");
    }
}

Declaration

public static bool Raycast(Ray ray, out RaycastHit hitInfo, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);

Параметры

Параметр Описание
луч Начальная точка и направление луча.
hitInfo Если вернётся true, hitInfo будет содержать больше информации о том, где ударился ближайший коллайдер. (Дополнительные ресурсы: RaycastHit).
maxDistance Максимальное расстояние, на котором луч должен проверять столкновения.
layerMask Маска слоя Маска слоя, которая используется для выборочного фильтрования коллайдеров, рассматриваемых при создании луча.
queryTriggerInteraction Указывает, должен ли этот запрос вызывать триггеры.

Возвращаемое значение

логическое Возвращает true, если луч пересекает любой коллайдер, иначе false.

Описание

То же самое, что выше, используя ray.origin и ray.direction вместо origin и direction.

Этот пример рисует линию вдоль длины луча каждый раз, когда обнаруживается столкновение:

using UnityEngine;
using UnityEngine.InputSystem;
                        
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(Mouse.current.position.ReadValue());
        RaycastHit hit;

if (Physics.Raycast(ray, out hit, 100)) Debug.DrawLine(ray.origin, hit.point); } }