# TRS

> Creates a translation, rotation and scaling matrix.

## Definition

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

## TRS(Vector3, Quaternion, Vector3)

Creates a translation, rotation and scaling matrix.

```csharp
public static Matrix4x4 TRS(Vector3 pos, Quaternion q, Vector3 s)
```

### Parameters

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

### Returns

| Type                                                                  | Description |
| --------------------------------------------------------------------- | ----------- |
| [Matrix4x4](/engine/6000.6/script-reference/unityengine/matrix4x4.md) |             |

### Remarks

The returned matrix is such that it places objects at position `pos`, oriented in rotation `q` and scaled by `s`.

```csharp
using UnityEngine;

public class ExampleScript : MonoBehaviour
{
    // Translate, rotate and scale a mesh. Try altering
    // the parameters in the inspector while running
    // to see the effect they have.

    public Vector3 translation;
    public Vector3 eulerAngles;
    public Vector3 scale = new Vector3(1, 1, 1);


    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()
    {
        // Set a Quaternion from the specified Euler angles.
        Quaternion rotation = Quaternion.Euler(eulerAngles.x, eulerAngles.y, eulerAngles.z);

        // Set the translation, rotation and scale parameters.
        Matrix4x4 m = Matrix4x4.TRS(translation, rotation, scale);

        // For each vertex...
        for (int i = 0; i < origVerts.Length; i++)
        {
            // Apply the matrix to the vertex.
            newVerts[i] = m.MultiplyPoint3x4(origVerts[i]);
        }

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

Additional Resources: [Matrix4x4.TRS](/engine/6000.6/script-reference/unityengine/matrix4x4/trs.md), [Matrix4x4.Rotate](/engine/6000.6/script-reference/unityengine/matrix4x4/rotate.md), [Matrix4x4.Scale](/engine/6000.6/script-reference/unityengine/matrix4x4/scale.md), [Matrix4x4.Translate](/engine/6000.6/script-reference/unityengine/matrix4x4/translate.md), [Matrix4x4.SetTRS](/engine/6000.6/script-reference/unityengine/matrix4x4/settrs.md) functions.

## TRS(Vector3, Quaternion, Vector3)

Creates a translation, rotation and scaling matrix.

```csharp
public static Matrix4x4 TRS(in Vector3 pos, in Quaternion q, in Vector3 s)
```

### Parameters

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

### Returns

| Type                                                                  | Description |
| --------------------------------------------------------------------- | ----------- |
| [Matrix4x4](/engine/6000.6/script-reference/unityengine/matrix4x4.md) |             |

### Remarks

The returned matrix is such that it places objects at position `pos`, oriented in rotation `q` and scaled by `s`.

```csharp
using UnityEngine;

public class ExampleScript : MonoBehaviour
{
    // Translate, rotate and scale a mesh. Try altering
    // the parameters in the inspector while running
    // to see the effect they have.

    public Vector3 translation;
    public Vector3 eulerAngles;
    public Vector3 scale = new Vector3(1, 1, 1);


    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()
    {
        // Set a Quaternion from the specified Euler angles.
        Quaternion rotation = Quaternion.Euler(eulerAngles.x, eulerAngles.y, eulerAngles.z);

        // Set the translation, rotation and scale parameters.
        Matrix4x4 m = Matrix4x4.TRS(translation, rotation, scale);

        // For each vertex...
        for (int i = 0; i < origVerts.Length; i++)
        {
            // Apply the matrix to the vertex.
            newVerts[i] = m.MultiplyPoint3x4(origVerts[i]);
        }

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

Additional Resources: [Matrix4x4.TRS](/engine/6000.6/script-reference/unityengine/matrix4x4/trs.md), [Matrix4x4.Rotate](/engine/6000.6/script-reference/unityengine/matrix4x4/rotate.md), [Matrix4x4.Scale](/engine/6000.6/script-reference/unityengine/matrix4x4/scale.md), [Matrix4x4.Translate](/engine/6000.6/script-reference/unityengine/matrix4x4/translate.md), [Matrix4x4.SetTRS](/engine/6000.6/script-reference/unityengine/matrix4x4/settrs.md) functions.
