Объявление
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);Параметры
center | Центр коробки. |
halfExtents | Половина размера коробки в каждом измерении. |
direction | Направление, в котором бросать ящик. |
orientation | Вращение коробки. |
maxDistance | Максимальная длина заброса. |
layerMask | Маска слоя, используемая для выборочного игнорирования коллайдеров при использовании капсулы.. |
queryTriggerInteraction | Указывает, должен ли этот запрос вызывать триггеры.. |
Возвращает
bool true, если какие-то пересечения были найдены.
Описание
Отбрасывает коробку по лучу и возвращает подробную информацию о том, что произошло.
Объявление
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);Параметры
center | Центр коробки. |
halfExtents | Половина размера коробки в каждом измерении. |
direction | Направление, в котором бросать ящик. |
hitInfo | Если возвращено значение true, hitInfo будет содержать дополнительную информацию о том, где произошло столкновение с коллайдером. (Смотрите так же: RaycastHit). |
orientation | Вращение коробки. |
maxDistance | Максимальная длина заброса. |
layerMask | Маска слоя, которая используется для выборочного игнорирования коллайдеров при использовании капсулы. |
queryTriggerInteraction | Указывает, должен ли этот запрос вызывать триггеры. |
Возвращает
bool 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 BoxCollider 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;
public class Example : MonoBehaviour
{
float m_MaxDistance;
float m_Speed;
bool m_HitDetect;
Collider m_Collider;
RaycastHit m_Hit;
void Start()
{
//Choose the distance the Box can reach to
m_MaxDistance = 300.0f;
m_Speed = 20.0f;
m_Collider = GetComponent<Collider>();
}
void Update()
{
//Simple movement in x and z axes
float xAxis = Input.GetAxis("Horizontal") * m_Speed;
float zAxis = Input.GetAxis("Vertical") * m_Speed;
transform.Translate(new Vector3(xAxis, 0, zAxis));
}
void FixedUpdate()
{
//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
m_HitDetect = Physics.BoxCast(m_Collider.bounds.center, transform.localScale, transform.forward, out m_Hit, transform.rotation, m_MaxDistance);
if (m_HitDetect)
{
//Output the name of the Collider your Box hit
Debug.Log("Hit : " + m_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;
//Check if there has been a hit yet
if (m_HitDetect)
{
//Draw a Ray forward from GameObject toward the hit
Gizmos.DrawRay(transform.position, transform.forward * m_Hit.distance);
//Draw a cube that extends to where the hit exists
Gizmos.DrawWireCube(transform.position + transform.forward * m_Hit.distance, transform.localScale);
}
//If there hasn't been a hit yet, draw the ray at the maximum distance
else
{
//Draw a Ray forward from GameObject toward the maximum distance
Gizmos.DrawRay(transform.position, transform.forward * m_MaxDistance);
//Draw a cube at the maximum distance
Gizmos.DrawWireCube(transform.position + transform.forward * m_MaxDistance, transform.localScale);
}
}
}