# Reflect

> Reflects a vector off the plane defined by a normal vector.

## Definition

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

## Reflect(Vector3, Vector3)

Reflects a vector off the plane defined by a normal vector.

```csharp
public static Vector3 Reflect(Vector3 inDirection, Vector3 inNormal)
```

### Parameters

**** (\[Vector3]\(/engine/6000.5/script-reference/unityengine/vector3)): The vector to be reflected in the plane.**** (\[Vector3]\(/engine/6000.5/script-reference/unityengine/vector3)): The normal vector that defines the plane of reflection.

### Returns

| Type                                                              | Description                                                       |
| ----------------------------------------------------------------- | ----------------------------------------------------------------- |
| [Vector3](/engine/6000.5/script-reference/unityengine/vector3.md) | The reflected vector. It has the same magnitude as `inDirection`. |

### Remarks

This method calculates the reflection vector using the following formula:

**B** = **A** − 2 × **N** × **A** ⋅ **N**

where A is the incoming vector and N defines the normal (perpendicular) vector of the reflection plane.

The returned value is a vector of equal magnitude to `inDirection` but with its direction reflected.

![Vec3ReflectDiagram (Reflect)](/api/media?file=/engine/6000.5/media/images/Vec3ReflectDiagram.png)

Reflection of a vector off a plane.

### Examples

```csharp
// This example moves a GameObject to the reflected position 
// of a second object
//
// To run this example, create two GameObjects at different 
// positions. In the Editor, assign these GameObjects as the 
// Original and Relflect Object variables. The reflected object
// moves to the reflected position of the original object. 

using UnityEngine;

public class ReflectExample : MonoBehaviour
{
    public Transform originalObject;
    public Transform reflectedObject;

    void Update()
    {
        // Makes the reflected object appear opposite of the original object,
        // mirrored in the y-z plane of the world
        reflectedObject.position = Vector3.Reflect(originalObject.position, Vector3.right);
    }
}
```

## Reflect(Vector3, Vector3)

Reflects a vector off the plane defined by a normal vector.

```csharp
public static Vector3 Reflect(in Vector3 inDirection, in Vector3 inNormal)
```

### Parameters

**** (\[Vector3]\(/engine/6000.5/script-reference/unityengine/vector3)): The vector to be reflected in the plane.**** (\[Vector3]\(/engine/6000.5/script-reference/unityengine/vector3)): The normal vector that defines the plane of reflection.

### Returns

| Type                                                              | Description                                                       |
| ----------------------------------------------------------------- | ----------------------------------------------------------------- |
| [Vector3](/engine/6000.5/script-reference/unityengine/vector3.md) | The reflected vector. It has the same magnitude as `inDirection`. |

### Remarks

This method calculates the reflection vector using the following formula:

**B** = **A** − 2 × **N** × **A** ⋅ **N**

where A is the incoming vector and N defines the normal (perpendicular) vector of the reflection plane.

The returned value is a vector of equal magnitude to `inDirection` but with its direction reflected.

![Vec3ReflectDiagram (Reflect)](/api/media?file=/engine/6000.5/media/images/Vec3ReflectDiagram.png)

Reflection of a vector off a plane.

### Examples

```csharp
// This example moves a GameObject to the reflected position 
// of a second object
//
// To run this example, create two GameObjects at different 
// positions. In the Editor, assign these GameObjects as the 
// Original and Relflect Object variables. The reflected object
// moves to the reflected position of the original object. 

using UnityEngine;

public class ReflectExample : MonoBehaviour
{
    public Transform originalObject;
    public Transform reflectedObject;

    void Update()
    {
        // Makes the reflected object appear opposite of the original object,
        // mirrored in the y-z plane of the world
        reflectedObject.position = Vector3.Reflect(originalObject.position, Vector3.right);
    }
}
```
