# BoxCast

> Casts the box along a ray and returns detailed information on what was hit.

## Definition

* **Type:** Method
* **Namespace:** [UnityEngine](/engine/6000.7/script-reference/unityengine.md)
* **Assembly:** UnityEngine.PhysicsModule

## BoxCast(Vector3, Vector3, Vector3, Quaternion, float, int, QueryTriggerInteraction)

Casts the box along a ray and returns detailed information on what was hit.

```csharp
public static bool BoxCast(Vector3 center, Vector3 halfExtents, Vector3 direction, Quaternion orientation, float maxDistance, int layerMask, QueryTriggerInteraction queryTriggerInteraction)
```

### Parameters

**** (\[Vector3]\(/engine/6000.7/script-reference/unityengine/vector3)): Center of the box.**** (\[Vector3]\(/engine/6000.7/script-reference/unityengine/vector3)): Half the size of the box in each dimension.**** (\[Vector3]\(/engine/6000.7/script-reference/unityengine/vector3)): The direction in which to cast the box.**** (\[Quaternion]\(/engine/6000.7/script-reference/unityengine/quaternion)): Rotation of the box.**** (\[float]\(https\://learn.microsoft.com/dotnet/api/system.single)): The max length of the cast.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): A [Layer mask](/engine/6000.7/manual/working-with-gameobjects/layers.md) that is used to selectively filter which colliders are considered when casting a box.**** (\[QueryTriggerInteraction]\(/engine/6000.7/script-reference/unityengine/querytriggerinteraction)): Specifies whether this query should hit Triggers.

### Returns

| Type                                                          | Description                            |
| ------------------------------------------------------------- | -------------------------------------- |
| [bool](https://learn.microsoft.com/dotnet/api/system.boolean) | True, if any intersections were found. |

## BoxCast(Vector3, Vector3, Vector3, RaycastHit, Quaternion, float, int, QueryTriggerInteraction)

Casts the box along a ray and returns detailed information on what was hit.

```csharp
public static bool BoxCast(Vector3 center, Vector3 halfExtents, Vector3 direction, out RaycastHit hitInfo, Quaternion orientation, float maxDistance, int layerMask, QueryTriggerInteraction queryTriggerInteraction)
```

### Parameters

**** (\[Vector3]\(/engine/6000.7/script-reference/unityengine/vector3)): Center of the box.**** (\[Vector3]\(/engine/6000.7/script-reference/unityengine/vector3)): Half the size of the box in each dimension.**** (\[Vector3]\(/engine/6000.7/script-reference/unityengine/vector3)): The direction in which to cast the box.**** (\[RaycastHit]\(/engine/6000.7/script-reference/unityengine/raycasthit)): If true is returned, `hitInfo` will contain more information about where the collider was hit. ().**** (\[Quaternion]\(/engine/6000.7/script-reference/unityengine/quaternion)): Rotation of the box.**** (\[float]\(https\://learn.microsoft.com/dotnet/api/system.single)): The max length of the cast.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): A [Layer mask](/engine/6000.7/manual/working-with-gameobjects/layers.md) that is used to selectively filter which colliders are considered when casting a box.**** (\[QueryTriggerInteraction]\(/engine/6000.7/script-reference/unityengine/querytriggerinteraction)): Specifies whether this query should hit Triggers.

### Returns

| Type                                                          | Description                            |
| ------------------------------------------------------------- | -------------------------------------- |
| [bool](https://learn.microsoft.com/dotnet/api/system.boolean) | True, if any intersections were found. |

### Remarks

Additional Resources: [RaycastHit](/engine/6000.7/script-reference/unityengine/raycasthit.md)

### Examples

```csharp
 //Attach this script to a GameObject. Make sure it has a Collider component by clicking the <b>Add Component</b> button. Then click <b>Physics</b>><b>Box Collider</b> 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);
        }
    }
}
```
