# InverseTransformDirection

> Transforms a direction from world space to local space. The opposite of Transform.TransformDirection.

## Definition

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

## InverseTransformDirection(Vector3)

Transforms a `direction` from world space to local space. The opposite of [Transform.TransformDirection](/engine/6000.5/script-reference/unityengine/transform/transformdirection.md).

```csharp
public Vector3 InverseTransformDirection(Vector3 direction)
```

### Parameters

**** (\[Vector3]\(/engine/6000.5/script-reference/unityengine/vector3)):&#x20;

### Returns

| Type                                                              | Description |
| ----------------------------------------------------------------- | ----------- |
| [Vector3](/engine/6000.5/script-reference/unityengine/vector3.md) |             |

### Remarks

This operation is not affected by scale or position of the transform. The transformed vector has the same length as the original.

If you need the inverse operation to transform from local space to world space you can use [Transform.TransformDirection](/engine/6000.5/script-reference/unityengine/transform/transformdirection.md)

You should use [Transform.InverseTransformPoint](/engine/6000.5/script-reference/unityengine/transform/inversetransformpoint.md) if the vector represents a position in space rather than a direction.

If you need to transform many directions at once consider using [Transform.InverseTransformDirections](/engine/6000.5/script-reference/unityengine/transform/inversetransformdirections.md) instead as it is much faster than repeatedly calling this function.

```csharp
using UnityEngine;

public class Example : MonoBehaviour
{
    void Start()
    {
        // transform the world forward into local space:
        Vector3 relative;
        relative = transform.InverseTransformDirection(Vector3.forward);
        Debug.Log(relative);
    }
}
```

Additional Resources:[Transform.TransformDirection](/engine/6000.5/script-reference/unityengine/transform/transformdirection.md), [Transform.InverseTransformDirections](/engine/6000.5/script-reference/unityengine/transform/inversetransformdirections.md), [Transform.InverseTransformPoint](/engine/6000.5/script-reference/unityengine/transform/inversetransformpoint.md), [Transform.InverseTransformVector](/engine/6000.5/script-reference/unityengine/transform/inversetransformvector.md).

## InverseTransformDirection(float, float, float)

Transforms the direction `x`, `y`, `z` from world space to local space. The opposite of [Transform.TransformDirection](/engine/6000.5/script-reference/unityengine/transform/transformdirection.md).

```csharp
public Vector3 InverseTransformDirection(float x, float y, float z)
```

### Parameters

**** (\[float]\(https\://learn.microsoft.com/dotnet/api/system.single)): **** (\[float]\(https\://learn.microsoft.com/dotnet/api/system.single)): **** (\[float]\(https\://learn.microsoft.com/dotnet/api/system.single)):&#x20;

### Returns

| Type                                                              | Description |
| ----------------------------------------------------------------- | ----------- |
| [Vector3](/engine/6000.5/script-reference/unityengine/vector3.md) |             |

### Remarks

This operation is not affected by scale or position of the transform. The transformed vector has the same length as the original.

If you need the inverse operation to transform from local space to world space you can use [Transform.TransformDirection](/engine/6000.5/script-reference/unityengine/transform/transformdirection.md)

You should use [Transform.InverseTransformPoint](/engine/6000.5/script-reference/unityengine/transform/inversetransformpoint.md) if the vector represents a position in space rather than a direction.

If you need to transform many directions at once consider using [Transform.InverseTransformDirections](/engine/6000.5/script-reference/unityengine/transform/inversetransformdirections.md) instead as it is much faster than repeatedly calling this function.

```csharp
using UnityEngine;

public class Example : MonoBehaviour
{
    void Start()
    {
        // transform the world forward into local space:
        Vector3 relative;
        relative = transform.InverseTransformDirection(Vector3.forward);
        Debug.Log(relative);
    }
}
```

Additional Resources:[Transform.TransformDirection](/engine/6000.5/script-reference/unityengine/transform/transformdirection.md), [Transform.InverseTransformDirections](/engine/6000.5/script-reference/unityengine/transform/inversetransformdirections.md), [Transform.InverseTransformPoint](/engine/6000.5/script-reference/unityengine/transform/inversetransformpoint.md), [Transform.InverseTransformVector](/engine/6000.5/script-reference/unityengine/transform/inversetransformvector.md).
