# inverse

> The inverse of this matrix. (Read Only)

## Definition

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

```csharp
public readonly Matrix4x4 inverse { get; }
```

### Remarks

Inverted matrix is such that if multiplied by the original would result in [Matrix4x4.identity](/engine/6000.7/script-reference/unityengine/matrix4x4/identity.md) matrix.

If as matrix transforms vectors in a particular way, then the inverse matrix can transform them back. For example, Transform's [Transform.worldToLocalMatrix](/engine/6000.7/script-reference/unityengine/transform/worldtolocalmatrix.md) and [Transform.localToWorldMatrix](/engine/6000.7/script-reference/unityengine/transform/localtoworldmatrix.md) are inverses of each other.

For regular 3D transformation matrices, it can be faster to use [Matrix4x4.Inverse3DAffine](/engine/6000.7/script-reference/unityengine/matrix4x4/inverse3daffine.md) method.

You can not invert a matrix with a [Matrix4x4.determinant](/engine/6000.7/script-reference/unityengine/matrix4x4/determinant.md) of zero. If you attempt this, `inverse` returns [Matrix4x4.zero](/engine/6000.7/script-reference/unityengine/matrix4x4/zero.md) instead.

```csharp
using UnityEngine;

// Stretch a mesh at an arbitrary angle around the X axis
[RequireComponent(typeof(MeshFilter))]
public class ExampleScript : MonoBehaviour
{
    // Angle and amount of stretching
    public float rotAngle = 30;
    public float stretch = 3;


    MeshFilter mf;
    Vector3[] origVerts;
    Vector3[] newVerts;

    void Start()
    {
        // Get the Mesh Filter component, save its original vertices
        // and make a new vertex array for processing.
        mf = GetComponent<MeshFilter>();
        origVerts = mf.mesh.vertices;
        newVerts = new Vector3[origVerts.Length];
    }

    void Update()
    {
        // Create a rotation matrix from a Quaternion
        Quaternion rot = Quaternion.Euler(rotAngle, 0, 0);
        Matrix4x4 m = Matrix4x4.TRS(Vector3.zero, rot, Vector3.one);

        // Get the inverse of the matrix: undo the rotation
        Matrix4x4 inv = m.inverse;

        // For each vertex:
        for (var i = 0; i < origVerts.Length; i++)
        {
            // Rotate the vertex and scale it along its new Y axis
            Vector3 pt = m.MultiplyPoint3x4(origVerts[i]);
            pt.y *= stretch;

            // Return the vertex to its original rotation (but with the
            // scaling still applied).
            newVerts[i] = inv.MultiplyPoint3x4(pt);
        }

        // Assign the transformed vertices to the mesh
        mf.mesh.vertices = newVerts;
    }
}
```

Additional Resources: [Matrix4x4.Inverse3DAffine](/engine/6000.7/script-reference/unityengine/matrix4x4/inverse3daffine.md), [Matrix4x4.determinant](/engine/6000.7/script-reference/unityengine/matrix4x4/determinant.md).
