# AddCapsule(Vector2, Vector2, float)

> Adds a capsule shape ( PhysicsShapeType2D.Capsule ) to the shape group.

## Definition

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

```csharp
public int AddCapsule(Vector2 vertex0, Vector2 vertex1, float radius)
```

### Parameters

**** (\[Vector2]\(/engine/6000.3/script-reference/unityengine/vector2)): The position of one end of a capsule shape. This point represents the center point of a logical circle at the end of a capsule.**** (\[Vector2]\(/engine/6000.3/script-reference/unityengine/vector2)): The position of the opposite end of a capsule shape. This point represents the  center point of a logical circle at the opposite end of a capsule.**** (\[float]\(https\://learn.microsoft.com/dotnet/api/system.single)): The radius of the capsule defining a radius around the `vertex0` and `vertex1` and the area between them.

### Returns

| Type                                                       | Description                                                                                                                                                                                                        |
| ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [int](https://learn.microsoft.com/dotnet/api/system.int32) | Returns the shape index the shape was added to in the [PhysicsShapeGroup2D](/engine/6000.3/script-reference/unityengine/physicsshapegroup2d.md). This index is used as the main reference when retrieving a shape. |

### Remarks

A capsule shape is comprised of a single edge shape defined by two vertices (vertex0 and `vertex1` ) and a `radius` that extends around the length of the edge and around the vertices.

**NOTE**: A capsule forms a closed shape and does have an interior therefore its interior is detectable by physics queries etc.

### Examples

```csharp
using UnityEngine;
using UnityEngine.Assertions;

public class Example : MonoBehaviour
{
    void Start()
    {
        CreateShape();
        GetShapeFromCollider();
    }

    // Create a custom shape.
    void CreateShape()
    {
        // Create a shape group.
        var shapeGroup = new PhysicsShapeGroup2D();

        // Add a Capsule.
        var shapeIndex = shapeGroup.AddCapsule
            (
                vertex0: Vector2.down,
                vertex1: Vector2.up,
                radius: 0.5f
            );

        // Fetch the actual shape created.
        var physicsShape = shapeGroup.GetShape(shapeIndex);

        // Validate what we created.
        Assert.AreEqual(PhysicsShapeType2D.Capsule, physicsShape.shapeType);
        Assert.AreApproximatelyEqual(0.5f, physicsShape.radius);
        Assert.AreEqual(2, physicsShape.vertexCount);
    }

    // Get a physics shape from a Collider.
    void GetShapeFromCollider()
    {
        // Fetch the collider.
        var collider = GetComponent<CapsuleCollider2D>();

        // If the collider is not active and enabled then we'll get no shapes.
        // Let's just quit if not.
        if (!collider.isActiveAndEnabled)
            return;

        // Configure the collider.
        collider.size = new Vector2(1f, 2f);

        // Create a shape group.
        var shapeGroup = new PhysicsShapeGroup2D();

        // Get the collider shapes.
        collider.GetShapes(shapeGroup);

        // Fetch the actual shape.
        var physicsShape = shapeGroup.GetShape(0);

        // Validate what we retrieved.
        Assert.AreEqual(PhysicsShapeType2D.Capsule, physicsShape.shapeType);
        Assert.AreApproximatelyEqual(0.5f, physicsShape.radius);
        Assert.AreEqual(2, physicsShape.vertexCount);
    }
}
```
