Physics.BoxCast
Declaration
public static bool BoxCast(Vector3 center, Vector3 halfExtents, Vector3 direction, Quaternion orientation = Quaternion.identity, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);Параметры
| Параметр | Описание |
|---|---|
| центр | Центр коробки. |
| halfExtents | Половина размера коробки в каждом измерении. |
| направление | Направление, в котором должен быть брошен ящик. |
| ориентация | Вращение коробки. |
| maxDistance | Максимальная длина отлива. |
| layerMask | Маска слоя Маска слоя, которая используется для выборочной фильтрации коллайдеров, которые рассматриваются при создании коробки. |
| queryTriggerInteraction | Указывает, должен ли этот запрос вызывать триггеры. |
Возвращаемое значение
логическое True, если были найдены пересечения.
Описание
Бросает коробку вдоль луча и возвращает подробную информацию о том, что попало.
Declaration
public static bool BoxCast(Vector3 center, Vector3 halfExtents, Vector3 direction, out RaycastHit hitInfo, Quaternion orientation = Quaternion.identity, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);Параметры
| Параметр | Описание |
|---|---|
| центр | Центр коробки. |
| halfExtents | Половина размера коробки в каждом измерении. |
| направление | Направление, в котором должен быть брошен ящик. |
| hitInfo | Если вернётся true, hitInfo будет содержать больше информации о месте удара коллайдера. (Дополнительные ресурсы: RaycastHit). |
| ориентация | Вращение коробки. |
| maxDistance | Максимальная длина отлива. |
| layerMask | Маска слоя Маска слоя, которая используется для выборочной фильтрации коллайдеров, которые рассматриваются при создании коробки. |
| queryTriggerInteraction | Указывает, должен ли этот запрос вызывать триггеры. |
Возвращаемое значение
логическое True, если были найдены пересечения.
Описание
Бросает коробку вдоль луча и возвращает подробную информацию о том, что попало.
//Attach this script to a GameObject. Make sure it has a Collider component by clicking the Add Component button. Then click Physics>Box Collider to attach a Box Collider component. //This script creates a BoxCast in front of the GameObject and outputs a message if another Collider is hit with the Collider’s name. //It also draws where the ray and BoxCast extends to. Just press the Gizmos button to see it in Play Mode. //Make sure to have another GameObject with a Collider component for the BoxCast to collide with.
using UnityEngine;
[RequireComponent(typeof(Collider))] public class Example : MonoBehaviour { [SerializeField] private float maxDistance = 300f; [SerializeField] private Vector3 boxSizeMultiplier = Vector3.one * 0.5f;
private Collider col; private RaycastHit hit; private bool hitDetected; void Awake() { col = GetComponent<Collider>(); } void FixedUpdate() { Vector3 halfExtents = Vector3.Scale(transform.localScale, boxSizeMultiplier); Vector3 origin = col.bounds.center; Vector3 direction = transform.forward; //Test to see if there is a hit using a BoxCast //Calculate using the center of the GameObject's Collider(could also just use the GameObject's position), half the GameObject's size, the direction, the GameObject's rotation, and the maximum distance as variables. //Also fetch the hit data hitDetected = Physics.BoxCast( origin, halfExtents, direction, out hit, transform.rotation, maxDistance); if (hitDetected) { //Output the name of the Collider your Box hit Debug.Log("Hit : " + hit.collider.name); } }
//Draw the BoxCast as a gizmo to show where it currently is testing. Click the Gizmos button to see this void OnDrawGizmos() { Gizmos.color = Color.red; if (hitDetected) { //Draw a Ray forward from GameObject toward the hit Gizmos.DrawRay(transform.position, transform.forward * hit.distance); //Draw a cube that extends to where the hit exists Gizmos.DrawWireCube(transform.position + transform.forward * hit.distance, transform.localScale); } else { //Draw a Ray forward from GameObject toward the maximum distance Gizmos.DrawRay(transform.position, transform.forward * maxDistance); //Draw a cube at the maximum distance Gizmos.DrawWireCube(transform.position + transform.forward * maxDistance, transform.localScale); } } }