# SetIndices

> Sets the index buffer for the sub-mesh.

## Definition

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

## SetIndices(int\[], MeshTopology, int, bool, int)

Sets the index buffer for the sub-mesh.

```csharp
public void SetIndices(int[] indices, MeshTopology topology, int submesh, bool calculateBounds, int baseVertex)
```

### Parameters

**** (\[int\[]]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The array of indices that define the mesh faces.**** (\[MeshTopology]\(/engine/6000.5/script-reference/unityengine/meshtopology)): The topology of the Mesh, e.g: Triangles, Lines, Quads, Points, etc. See [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md).**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The sub-mesh to modify.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): Calculate the bounding box of the sub-mesh after setting the indices. Unity does this by default. Use false when you want to use the existing bounding box and reduce the CPU cost of setting the indices.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Optional vertex offset that is added to all vertex indices.

### Remarks

A sub-mesh represents a list of triangles (or indices with a different [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md)) that are rendered using a single [Material](/engine/6000.5/script-reference/unityengine/material.md). When the Mesh is used with a [Renderer](/engine/6000.5/script-reference/unityengine/renderer.md) that has multiple materials, you should ensure that there is one sub-mesh per Material.

[Mesh.SetTriangles](/engine/6000.5/script-reference/unityengine/mesh/settriangles.md) and [Mesh.triangles](/engine/6000.5/script-reference/unityengine/mesh/triangles.md) always set the Mesh to be composed of triangle faces. Use SetIndices to create a Mesh composed of lines or points.

The `baseVertex` argument can be used to achieve meshes that are larger than 65536 vertices while using 16 bit index buffers, as long as each sub-mesh index fits within its own 65535 value range. For example, if the index buffer that is passed to SetIndices contains indices 10,11,12 and `baseVertex` is set to 100000, then effectively vertices 100010, 100011 and 100012 will be used for rendering.

Note that meshes use 16-bit [Mesh.indexFormat](/engine/6000.5/script-reference/unityengine/mesh/indexformat.md) by default, i.e. the maximum value supported in the index buffer is 65535 (even when using int\[] input data). In order to use larger index buffer values, you should first set the [Mesh.indexFormat](/engine/6000.5/script-reference/unityengine/mesh/indexformat.md) to [IndexFormat.UInt32](/engine/6000.5/script-reference/unityengine/rendering/indexformat/uint32.md).

Call [Mesh.RecalculateBounds](/engine/6000.5/script-reference/unityengine/mesh/recalculatebounds.md) after updating all sub-meshes if you want to update the [Mesh](/engine/6000.5/script-reference/unityengine/mesh.md)'s bounding box.

Additional Resources: [Mesh.subMeshCount](/engine/6000.5/script-reference/unityengine/mesh/submeshcount.md), [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md), [Mesh.indexFormat](/engine/6000.5/script-reference/unityengine/mesh/indexformat.md).

## SetIndices(int\[], MeshTopology, int, int, bool, int)

Sets the index buffer for the sub-mesh.

```csharp
public void SetIndices(int[] indices, MeshTopology topology, int submesh, int meshLod, bool calculateBounds = true, int baseVertex = 0)
```

### Parameters

**** (\[int\[]]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The array of indices that define the mesh faces.**** (\[MeshTopology]\(/engine/6000.5/script-reference/unityengine/meshtopology)): The topology of the Mesh, e.g: Triangles, Lines, Quads, Points, etc. See [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md).**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The sub-mesh to modify.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The Mesh LOD to modify. Use -1 to modify the entire sub-mesh. If not provided, LOD0 is modified.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): Calculate the bounding box of the sub-mesh after setting the indices. Unity does this by default. Use false when you want to use the existing bounding box and reduce the CPU cost of setting the indices.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Optional vertex offset that is added to all vertex indices.

### Remarks

A sub-mesh represents a list of triangles (or indices with a different [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md)) that are rendered using a single [Material](/engine/6000.5/script-reference/unityengine/material.md). When the Mesh is used with a [Renderer](/engine/6000.5/script-reference/unityengine/renderer.md) that has multiple materials, you should ensure that there is one sub-mesh per Material.

[Mesh.SetTriangles](/engine/6000.5/script-reference/unityengine/mesh/settriangles.md) and [Mesh.triangles](/engine/6000.5/script-reference/unityengine/mesh/triangles.md) always set the Mesh to be composed of triangle faces. Use SetIndices to create a Mesh composed of lines or points.

The `baseVertex` argument can be used to achieve meshes that are larger than 65536 vertices while using 16 bit index buffers, as long as each sub-mesh index fits within its own 65535 value range. For example, if the index buffer that is passed to SetIndices contains indices 10,11,12 and `baseVertex` is set to 100000, then effectively vertices 100010, 100011 and 100012 will be used for rendering.

Note that meshes use 16-bit [Mesh.indexFormat](/engine/6000.5/script-reference/unityengine/mesh/indexformat.md) by default, i.e. the maximum value supported in the index buffer is 65535 (even when using int\[] input data). In order to use larger index buffer values, you should first set the [Mesh.indexFormat](/engine/6000.5/script-reference/unityengine/mesh/indexformat.md) to [IndexFormat.UInt32](/engine/6000.5/script-reference/unityengine/rendering/indexformat/uint32.md).

Call [Mesh.RecalculateBounds](/engine/6000.5/script-reference/unityengine/mesh/recalculatebounds.md) after updating all sub-meshes if you want to update the [Mesh](/engine/6000.5/script-reference/unityengine/mesh.md)'s bounding box.

Additional Resources: [Mesh.subMeshCount](/engine/6000.5/script-reference/unityengine/mesh/submeshcount.md), [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md), [Mesh.indexFormat](/engine/6000.5/script-reference/unityengine/mesh/indexformat.md).

## SetIndices(int\[], int, int, MeshTopology, int, bool, int)

Sets the index buffer of a sub-mesh, using a part of the input array.

```csharp
public void SetIndices(int[] indices, int indicesStart, int indicesLength, MeshTopology topology, int submesh, bool calculateBounds = true, int baseVertex = 0)
```

### Parameters

**** (\[int\[]]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The array of indices that define the mesh faces.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Index of the first element to take from the input array.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Number of elements to take from the input array.**** (\[MeshTopology]\(/engine/6000.5/script-reference/unityengine/meshtopology)): The topology of the Mesh, e.g: Triangles, Lines, Quads, Points, etc. See [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md).**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The sub-mesh to modify.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): Calculate the bounding box of the sub-mesh after setting the indices. Unity does this by default. Use false when you want to use the existing bounding box and reduce the CPU cost of setting the indices.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Optional vertex offset that is added to all vertex indices.

### Remarks

This method behaves as if you called SetIndices with an array that is a slice of the whole array, starting at `indicesStart` index and being of a given `indicesLength` length. The resulting sub-mesh will have `indicesLength` amount of vertex indices.

## SetIndices(int\[], int, int, MeshTopology, int, int, bool, int)

Sets the index buffer of a sub-mesh, using a part of the input array.

```csharp
public void SetIndices(int[] indices, int indicesStart, int indicesLength, MeshTopology topology, int submesh, int meshLod, bool calculateBounds = true, int baseVertex = 0)
```

### Parameters

**** (\[int\[]]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The array of indices that define the mesh faces.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Index of the first element to take from the input array.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Number of elements to take from the input array.**** (\[MeshTopology]\(/engine/6000.5/script-reference/unityengine/meshtopology)): The topology of the Mesh, e.g: Triangles, Lines, Quads, Points, etc. See [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md).**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The sub-mesh to modify.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Mesh level of detail to modify.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): Calculate the bounding box of the sub-mesh after setting the indices. Unity does this by default. Use false when you want to use the existing bounding box and reduce the CPU cost of setting the indices.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Optional vertex offset that is added to all vertex indices.

### Remarks

This method behaves as if you called SetIndices with an array that is a slice of the whole array, starting at `indicesStart` index and being of a given `indicesLength` length. The resulting sub-mesh will have `indicesLength` amount of vertex indices.

## SetIndices(ushort\[], MeshTopology, int, bool, int)

Sets the index buffer for the sub-mesh.

```csharp
public void SetIndices(ushort[] indices, MeshTopology topology, int submesh, bool calculateBounds = true, int baseVertex = 0)
```

### Parameters

**** (\[ushort\[]]\(https\://learn.microsoft.com/dotnet/api/system.uint16)): The array of indices that define the mesh faces.**** (\[MeshTopology]\(/engine/6000.5/script-reference/unityengine/meshtopology)): The topology of the Mesh, e.g: Triangles, Lines, Quads, Points, etc. See [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md).**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The sub-mesh to modify.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): Calculate the bounding box of the sub-mesh after setting the indices. Unity does this by default. Use false when you want to use the existing bounding box and reduce the CPU cost of setting the indices.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Optional vertex offset that is added to all vertex indices.

### Remarks

A sub-mesh represents a list of triangles (or indices with a different [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md)) that are rendered using a single [Material](/engine/6000.5/script-reference/unityengine/material.md). When the Mesh is used with a [Renderer](/engine/6000.5/script-reference/unityengine/renderer.md) that has multiple materials, you should ensure that there is one sub-mesh per Material.

[Mesh.SetTriangles](/engine/6000.5/script-reference/unityengine/mesh/settriangles.md) and [Mesh.triangles](/engine/6000.5/script-reference/unityengine/mesh/triangles.md) always set the Mesh to be composed of triangle faces. Use SetIndices to create a Mesh composed of lines or points.

The `baseVertex` argument can be used to achieve meshes that are larger than 65536 vertices while using 16 bit index buffers, as long as each sub-mesh index fits within its own 65535 value range. For example, if the index buffer that is passed to SetIndices contains indices 10,11,12 and `baseVertex` is set to 100000, then effectively vertices 100010, 100011 and 100012 will be used for rendering.

Note that meshes use 16-bit [Mesh.indexFormat](/engine/6000.5/script-reference/unityengine/mesh/indexformat.md) by default, i.e. the maximum value supported in the index buffer is 65535 (even when using int\[] input data). In order to use larger index buffer values, you should first set the [Mesh.indexFormat](/engine/6000.5/script-reference/unityengine/mesh/indexformat.md) to [IndexFormat.UInt32](/engine/6000.5/script-reference/unityengine/rendering/indexformat/uint32.md).

Call [Mesh.RecalculateBounds](/engine/6000.5/script-reference/unityengine/mesh/recalculatebounds.md) after updating all sub-meshes if you want to update the [Mesh](/engine/6000.5/script-reference/unityengine/mesh.md)'s bounding box.

Additional Resources: [Mesh.subMeshCount](/engine/6000.5/script-reference/unityengine/mesh/submeshcount.md), [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md), [Mesh.indexFormat](/engine/6000.5/script-reference/unityengine/mesh/indexformat.md).

## SetIndices(ushort\[], MeshTopology, int, int, bool, int)

Sets the index buffer for the sub-mesh.

```csharp
public void SetIndices(ushort[] indices, MeshTopology topology, int submesh, int meshLod, bool calculateBounds = true, int baseVertex = 0)
```

### Parameters

**** (\[ushort\[]]\(https\://learn.microsoft.com/dotnet/api/system.uint16)): The array of indices that define the mesh faces.**** (\[MeshTopology]\(/engine/6000.5/script-reference/unityengine/meshtopology)): The topology of the Mesh, e.g: Triangles, Lines, Quads, Points, etc. See [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md).**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The sub-mesh to modify.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The Mesh LOD to modify. Use -1 to modify the entire sub-mesh. If not provided, LOD0 is modified.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): Calculate the bounding box of the sub-mesh after setting the indices. Unity does this by default. Use false when you want to use the existing bounding box and reduce the CPU cost of setting the indices.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Optional vertex offset that is added to all vertex indices.

### Remarks

A sub-mesh represents a list of triangles (or indices with a different [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md)) that are rendered using a single [Material](/engine/6000.5/script-reference/unityengine/material.md). When the Mesh is used with a [Renderer](/engine/6000.5/script-reference/unityengine/renderer.md) that has multiple materials, you should ensure that there is one sub-mesh per Material.

[Mesh.SetTriangles](/engine/6000.5/script-reference/unityengine/mesh/settriangles.md) and [Mesh.triangles](/engine/6000.5/script-reference/unityengine/mesh/triangles.md) always set the Mesh to be composed of triangle faces. Use SetIndices to create a Mesh composed of lines or points.

The `baseVertex` argument can be used to achieve meshes that are larger than 65536 vertices while using 16 bit index buffers, as long as each sub-mesh index fits within its own 65535 value range. For example, if the index buffer that is passed to SetIndices contains indices 10,11,12 and `baseVertex` is set to 100000, then effectively vertices 100010, 100011 and 100012 will be used for rendering.

Note that meshes use 16-bit [Mesh.indexFormat](/engine/6000.5/script-reference/unityengine/mesh/indexformat.md) by default, i.e. the maximum value supported in the index buffer is 65535 (even when using int\[] input data). In order to use larger index buffer values, you should first set the [Mesh.indexFormat](/engine/6000.5/script-reference/unityengine/mesh/indexformat.md) to [IndexFormat.UInt32](/engine/6000.5/script-reference/unityengine/rendering/indexformat/uint32.md).

Call [Mesh.RecalculateBounds](/engine/6000.5/script-reference/unityengine/mesh/recalculatebounds.md) after updating all sub-meshes if you want to update the [Mesh](/engine/6000.5/script-reference/unityengine/mesh.md)'s bounding box.

Additional Resources: [Mesh.subMeshCount](/engine/6000.5/script-reference/unityengine/mesh/submeshcount.md), [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md), [Mesh.indexFormat](/engine/6000.5/script-reference/unityengine/mesh/indexformat.md).

## SetIndices(ushort\[], int, int, MeshTopology, int, bool, int)

Sets the index buffer of a sub-mesh, using a part of the input array.

```csharp
public void SetIndices(ushort[] indices, int indicesStart, int indicesLength, MeshTopology topology, int submesh, bool calculateBounds = true, int baseVertex = 0)
```

### Parameters

**** (\[ushort\[]]\(https\://learn.microsoft.com/dotnet/api/system.uint16)): The array of indices that define the mesh faces.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Index of the first element to take from the input array.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Number of elements to take from the input array.**** (\[MeshTopology]\(/engine/6000.5/script-reference/unityengine/meshtopology)): The topology of the Mesh, e.g: Triangles, Lines, Quads, Points, etc. See [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md).**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The sub-mesh to modify.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): Calculate the bounding box of the sub-mesh after setting the indices. Unity does this by default. Use false when you want to use the existing bounding box and reduce the CPU cost of setting the indices.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Optional vertex offset that is added to all vertex indices.

### Remarks

This method behaves as if you called SetIndices with an array that is a slice of the whole array, starting at `indicesStart` index and being of a given `indicesLength` length. The resulting sub-mesh will have `indicesLength` amount of vertex indices.

## SetIndices(ushort\[], int, int, MeshTopology, int, int, bool, int)

Sets the index buffer of a sub-mesh, using a part of the input array.

```csharp
public void SetIndices(ushort[] indices, int indicesStart, int indicesLength, MeshTopology topology, int submesh, int meshLod, bool calculateBounds = true, int baseVertex = 0)
```

### Parameters

**** (\[ushort\[]]\(https\://learn.microsoft.com/dotnet/api/system.uint16)): The array of indices that define the mesh faces.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Index of the first element to take from the input array.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Number of elements to take from the input array.**** (\[MeshTopology]\(/engine/6000.5/script-reference/unityengine/meshtopology)): The topology of the Mesh, e.g: Triangles, Lines, Quads, Points, etc. See [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md).**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The sub-mesh to modify.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Mesh level of detail to modify.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): Calculate the bounding box of the sub-mesh after setting the indices. Unity does this by default. Use false when you want to use the existing bounding box and reduce the CPU cost of setting the indices.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Optional vertex offset that is added to all vertex indices.

### Remarks

This method behaves as if you called SetIndices with an array that is a slice of the whole array, starting at `indicesStart` index and being of a given `indicesLength` length. The resulting sub-mesh will have `indicesLength` amount of vertex indices.

## SetIndices\<T>(NativeArray\<T>, MeshTopology, int, bool, int)

Sets the index buffer for the sub-mesh.

```csharp
public void SetIndices<T>(NativeArray<T> indices, MeshTopology topology, int submesh, bool calculateBounds = true, int baseVertex = 0) where T : struct
```

### Parameters

**** (\[NativeArray\<T>]\(/engine/6000.5/script-reference/unity/collections/nativearray1)): The array of indices that define the mesh faces.**** (\[MeshTopology]\(/engine/6000.5/script-reference/unityengine/meshtopology)): The topology of the Mesh, e.g: Triangles, Lines, Quads, Points, etc. See [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md).**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The sub-mesh to modify.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): Calculate the bounding box of the sub-mesh after setting the indices. Unity does this by default. Use false when you want to use the existing bounding box and reduce the CPU cost of setting the indices.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Optional vertex offset that is added to all vertex indices.

### Remarks

A sub-mesh represents a list of triangles (or indices with a different [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md)) that are rendered using a single [Material](/engine/6000.5/script-reference/unityengine/material.md). When the Mesh is used with a [Renderer](/engine/6000.5/script-reference/unityengine/renderer.md) that has multiple materials, you should ensure that there is one sub-mesh per Material.

[Mesh.SetTriangles](/engine/6000.5/script-reference/unityengine/mesh/settriangles.md) and [Mesh.triangles](/engine/6000.5/script-reference/unityengine/mesh/triangles.md) always set the Mesh to be composed of triangle faces. Use SetIndices to create a Mesh composed of lines or points.

The `baseVertex` argument can be used to achieve meshes that are larger than 65536 vertices while using 16 bit index buffers, as long as each sub-mesh index fits within its own 65535 value range. For example, if the index buffer that is passed to SetIndices contains indices 10,11,12 and `baseVertex` is set to 100000, then effectively vertices 100010, 100011 and 100012 will be used for rendering.

Note that meshes use 16-bit [Mesh.indexFormat](/engine/6000.5/script-reference/unityengine/mesh/indexformat.md) by default, i.e. the maximum value supported in the index buffer is 65535 (even when using int\[] input data). In order to use larger index buffer values, you should first set the [Mesh.indexFormat](/engine/6000.5/script-reference/unityengine/mesh/indexformat.md) to [IndexFormat.UInt32](/engine/6000.5/script-reference/unityengine/rendering/indexformat/uint32.md).

Call [Mesh.RecalculateBounds](/engine/6000.5/script-reference/unityengine/mesh/recalculatebounds.md) after updating all sub-meshes if you want to update the [Mesh](/engine/6000.5/script-reference/unityengine/mesh.md)'s bounding box.

Additional Resources: [Mesh.subMeshCount](/engine/6000.5/script-reference/unityengine/mesh/submeshcount.md), [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md), [Mesh.indexFormat](/engine/6000.5/script-reference/unityengine/mesh/indexformat.md).

## SetIndices\<T>(NativeArray\<T>, MeshTopology, int, int, bool, int)

Sets the index buffer for the sub-mesh.

```csharp
public void SetIndices<T>(NativeArray<T> indices, MeshTopology topology, int submesh, int meshLod, bool calculateBounds = true, int baseVertex = 0) where T : struct
```

### Parameters

**** (\[NativeArray\<T>]\(/engine/6000.5/script-reference/unity/collections/nativearray1)): The array of indices that define the mesh faces.**** (\[MeshTopology]\(/engine/6000.5/script-reference/unityengine/meshtopology)): The topology of the Mesh, e.g: Triangles, Lines, Quads, Points, etc. See [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md).**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The sub-mesh to modify.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The Mesh LOD to modify. Use -1 to modify the entire sub-mesh. If not provided, LOD0 is modified.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): Calculate the bounding box of the sub-mesh after setting the indices. Unity does this by default. Use false when you want to use the existing bounding box and reduce the CPU cost of setting the indices.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Optional vertex offset that is added to all vertex indices.

### Remarks

A sub-mesh represents a list of triangles (or indices with a different [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md)) that are rendered using a single [Material](/engine/6000.5/script-reference/unityengine/material.md). When the Mesh is used with a [Renderer](/engine/6000.5/script-reference/unityengine/renderer.md) that has multiple materials, you should ensure that there is one sub-mesh per Material.

[Mesh.SetTriangles](/engine/6000.5/script-reference/unityengine/mesh/settriangles.md) and [Mesh.triangles](/engine/6000.5/script-reference/unityengine/mesh/triangles.md) always set the Mesh to be composed of triangle faces. Use SetIndices to create a Mesh composed of lines or points.

The `baseVertex` argument can be used to achieve meshes that are larger than 65536 vertices while using 16 bit index buffers, as long as each sub-mesh index fits within its own 65535 value range. For example, if the index buffer that is passed to SetIndices contains indices 10,11,12 and `baseVertex` is set to 100000, then effectively vertices 100010, 100011 and 100012 will be used for rendering.

Note that meshes use 16-bit [Mesh.indexFormat](/engine/6000.5/script-reference/unityengine/mesh/indexformat.md) by default, i.e. the maximum value supported in the index buffer is 65535 (even when using int\[] input data). In order to use larger index buffer values, you should first set the [Mesh.indexFormat](/engine/6000.5/script-reference/unityengine/mesh/indexformat.md) to [IndexFormat.UInt32](/engine/6000.5/script-reference/unityengine/rendering/indexformat/uint32.md).

Call [Mesh.RecalculateBounds](/engine/6000.5/script-reference/unityengine/mesh/recalculatebounds.md) after updating all sub-meshes if you want to update the [Mesh](/engine/6000.5/script-reference/unityengine/mesh.md)'s bounding box.

Additional Resources: [Mesh.subMeshCount](/engine/6000.5/script-reference/unityengine/mesh/submeshcount.md), [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md), [Mesh.indexFormat](/engine/6000.5/script-reference/unityengine/mesh/indexformat.md).

## SetIndices\<T>(NativeArray\<T>, int, int, MeshTopology, int, bool, int)

Sets the index buffer of a sub-mesh, using a part of the input array.

```csharp
public void SetIndices<T>(NativeArray<T> indices, int indicesStart, int indicesLength, MeshTopology topology, int submesh, bool calculateBounds = true, int baseVertex = 0) where T : struct
```

### Parameters

**** (\[NativeArray\<T>]\(/engine/6000.5/script-reference/unity/collections/nativearray1)): The array of indices that define the mesh faces.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Index of the first element to take from the input array.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Number of elements to take from the input array.**** (\[MeshTopology]\(/engine/6000.5/script-reference/unityengine/meshtopology)): The topology of the Mesh, e.g: Triangles, Lines, Quads, Points, etc. See [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md).**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The sub-mesh to modify.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): Calculate the bounding box of the sub-mesh after setting the indices. Unity does this by default. Use false when you want to use the existing bounding box and reduce the CPU cost of setting the indices.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Optional vertex offset that is added to all vertex indices.

### Remarks

This method behaves as if you called SetIndices with an array that is a slice of the whole array, starting at `indicesStart` index and being of a given `indicesLength` length. The resulting sub-mesh will have `indicesLength` amount of vertex indices.

## SetIndices\<T>(NativeArray\<T>, int, int, MeshTopology, int, int, bool, int)

Sets the index buffer of a sub-mesh, using a part of the input array.

```csharp
public void SetIndices<T>(NativeArray<T> indices, int indicesStart, int indicesLength, MeshTopology topology, int submesh, int meshLod, bool calculateBounds = true, int baseVertex = 0) where T : struct
```

### Parameters

**** (\[NativeArray\<T>]\(/engine/6000.5/script-reference/unity/collections/nativearray1)): The array of indices that define the mesh faces.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Index of the first element to take from the input array.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Number of elements to take from the input array.**** (\[MeshTopology]\(/engine/6000.5/script-reference/unityengine/meshtopology)): The topology of the Mesh, e.g: Triangles, Lines, Quads, Points, etc. See [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md).**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The sub-mesh to modify.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Mesh level of detail to modify.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): Calculate the bounding box of the sub-mesh after setting the indices. Unity does this by default. Use false when you want to use the existing bounding box and reduce the CPU cost of setting the indices.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Optional vertex offset that is added to all vertex indices.

### Remarks

This method behaves as if you called SetIndices with an array that is a slice of the whole array, starting at `indicesStart` index and being of a given `indicesLength` length. The resulting sub-mesh will have `indicesLength` amount of vertex indices.

## SetIndices(List\<int>, MeshTopology, int, bool, int)

Sets the index buffer for the sub-mesh.

```csharp
public void SetIndices(List<int> indices, MeshTopology topology, int submesh, bool calculateBounds = true, int baseVertex = 0)
```

### Parameters

**** (\[List\<int>]\(https\://learn.microsoft.com/dotnet/api/system.collections.generic.list-1)): The array of indices that define the mesh faces.**** (\[MeshTopology]\(/engine/6000.5/script-reference/unityengine/meshtopology)): The topology of the Mesh, e.g: Triangles, Lines, Quads, Points, etc. See [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md).**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The sub-mesh to modify.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): Calculate the bounding box of the sub-mesh after setting the indices. Unity does this by default. Use false when you want to use the existing bounding box and reduce the CPU cost of setting the indices.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Optional vertex offset that is added to all vertex indices.

### Remarks

A sub-mesh represents a list of triangles (or indices with a different [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md)) that are rendered using a single [Material](/engine/6000.5/script-reference/unityengine/material.md). When the Mesh is used with a [Renderer](/engine/6000.5/script-reference/unityengine/renderer.md) that has multiple materials, you should ensure that there is one sub-mesh per Material.

[Mesh.SetTriangles](/engine/6000.5/script-reference/unityengine/mesh/settriangles.md) and [Mesh.triangles](/engine/6000.5/script-reference/unityengine/mesh/triangles.md) always set the Mesh to be composed of triangle faces. Use SetIndices to create a Mesh composed of lines or points.

The `baseVertex` argument can be used to achieve meshes that are larger than 65536 vertices while using 16 bit index buffers, as long as each sub-mesh index fits within its own 65535 value range. For example, if the index buffer that is passed to SetIndices contains indices 10,11,12 and `baseVertex` is set to 100000, then effectively vertices 100010, 100011 and 100012 will be used for rendering.

Note that meshes use 16-bit [Mesh.indexFormat](/engine/6000.5/script-reference/unityengine/mesh/indexformat.md) by default, i.e. the maximum value supported in the index buffer is 65535 (even when using int\[] input data). In order to use larger index buffer values, you should first set the [Mesh.indexFormat](/engine/6000.5/script-reference/unityengine/mesh/indexformat.md) to [IndexFormat.UInt32](/engine/6000.5/script-reference/unityengine/rendering/indexformat/uint32.md).

Call [Mesh.RecalculateBounds](/engine/6000.5/script-reference/unityengine/mesh/recalculatebounds.md) after updating all sub-meshes if you want to update the [Mesh](/engine/6000.5/script-reference/unityengine/mesh.md)'s bounding box.

Additional Resources: [Mesh.subMeshCount](/engine/6000.5/script-reference/unityengine/mesh/submeshcount.md), [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md), [Mesh.indexFormat](/engine/6000.5/script-reference/unityengine/mesh/indexformat.md).

## SetIndices(List\<int>, MeshTopology, int, int, bool, int)

Sets the index buffer for the sub-mesh.

```csharp
public void SetIndices(List<int> indices, MeshTopology topology, int submesh, int meshLod, bool calculateBounds = true, int baseVertex = 0)
```

### Parameters

**** (\[List\<int>]\(https\://learn.microsoft.com/dotnet/api/system.collections.generic.list-1)): The array of indices that define the mesh faces.**** (\[MeshTopology]\(/engine/6000.5/script-reference/unityengine/meshtopology)): The topology of the Mesh, e.g: Triangles, Lines, Quads, Points, etc. See [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md).**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The sub-mesh to modify.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The Mesh LOD to modify. Use -1 to modify the entire sub-mesh. If not provided, LOD0 is modified.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): Calculate the bounding box of the sub-mesh after setting the indices. Unity does this by default. Use false when you want to use the existing bounding box and reduce the CPU cost of setting the indices.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Optional vertex offset that is added to all vertex indices.

### Remarks

A sub-mesh represents a list of triangles (or indices with a different [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md)) that are rendered using a single [Material](/engine/6000.5/script-reference/unityengine/material.md). When the Mesh is used with a [Renderer](/engine/6000.5/script-reference/unityengine/renderer.md) that has multiple materials, you should ensure that there is one sub-mesh per Material.

[Mesh.SetTriangles](/engine/6000.5/script-reference/unityengine/mesh/settriangles.md) and [Mesh.triangles](/engine/6000.5/script-reference/unityengine/mesh/triangles.md) always set the Mesh to be composed of triangle faces. Use SetIndices to create a Mesh composed of lines or points.

The `baseVertex` argument can be used to achieve meshes that are larger than 65536 vertices while using 16 bit index buffers, as long as each sub-mesh index fits within its own 65535 value range. For example, if the index buffer that is passed to SetIndices contains indices 10,11,12 and `baseVertex` is set to 100000, then effectively vertices 100010, 100011 and 100012 will be used for rendering.

Note that meshes use 16-bit [Mesh.indexFormat](/engine/6000.5/script-reference/unityengine/mesh/indexformat.md) by default, i.e. the maximum value supported in the index buffer is 65535 (even when using int\[] input data). In order to use larger index buffer values, you should first set the [Mesh.indexFormat](/engine/6000.5/script-reference/unityengine/mesh/indexformat.md) to [IndexFormat.UInt32](/engine/6000.5/script-reference/unityengine/rendering/indexformat/uint32.md).

Call [Mesh.RecalculateBounds](/engine/6000.5/script-reference/unityengine/mesh/recalculatebounds.md) after updating all sub-meshes if you want to update the [Mesh](/engine/6000.5/script-reference/unityengine/mesh.md)'s bounding box.

Additional Resources: [Mesh.subMeshCount](/engine/6000.5/script-reference/unityengine/mesh/submeshcount.md), [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md), [Mesh.indexFormat](/engine/6000.5/script-reference/unityengine/mesh/indexformat.md).

## SetIndices(List\<int>, int, int, MeshTopology, int, bool, int)

Sets the index buffer of a sub-mesh, using a part of the input array.

```csharp
public void SetIndices(List<int> indices, int indicesStart, int indicesLength, MeshTopology topology, int submesh, bool calculateBounds = true, int baseVertex = 0)
```

### Parameters

**** (\[List\<int>]\(https\://learn.microsoft.com/dotnet/api/system.collections.generic.list-1)): The array of indices that define the mesh faces.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Index of the first element to take from the input array.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Number of elements to take from the input array.**** (\[MeshTopology]\(/engine/6000.5/script-reference/unityengine/meshtopology)): The topology of the Mesh, e.g: Triangles, Lines, Quads, Points, etc. See [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md).**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The sub-mesh to modify.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): Calculate the bounding box of the sub-mesh after setting the indices. Unity does this by default. Use false when you want to use the existing bounding box and reduce the CPU cost of setting the indices.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Optional vertex offset that is added to all vertex indices.

### Remarks

This method behaves as if you called SetIndices with an array that is a slice of the whole array, starting at `indicesStart` index and being of a given `indicesLength` length. The resulting sub-mesh will have `indicesLength` amount of vertex indices.

## SetIndices(List\<int>, int, int, MeshTopology, int, int, bool, int)

Sets the index buffer of a sub-mesh, using a part of the input array.

```csharp
public void SetIndices(List<int> indices, int indicesStart, int indicesLength, MeshTopology topology, int submesh, int meshLod, bool calculateBounds = true, int baseVertex = 0)
```

### Parameters

**** (\[List\<int>]\(https\://learn.microsoft.com/dotnet/api/system.collections.generic.list-1)): The array of indices that define the mesh faces.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Index of the first element to take from the input array.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Number of elements to take from the input array.**** (\[MeshTopology]\(/engine/6000.5/script-reference/unityengine/meshtopology)): The topology of the Mesh, e.g: Triangles, Lines, Quads, Points, etc. See [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md).**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The sub-mesh to modify.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Mesh level of detail to modify.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): Calculate the bounding box of the sub-mesh after setting the indices. Unity does this by default. Use false when you want to use the existing bounding box and reduce the CPU cost of setting the indices.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Optional vertex offset that is added to all vertex indices.

### Remarks

This method behaves as if you called SetIndices with an array that is a slice of the whole array, starting at `indicesStart` index and being of a given `indicesLength` length. The resulting sub-mesh will have `indicesLength` amount of vertex indices.

## SetIndices(List\<ushort>, MeshTopology, int, bool, int)

Sets the index buffer for the sub-mesh.

```csharp
public void SetIndices(List<ushort> indices, MeshTopology topology, int submesh, bool calculateBounds = true, int baseVertex = 0)
```

### Parameters

**** (\[List\<ushort>]\(https\://learn.microsoft.com/dotnet/api/system.collections.generic.list-1)): The array of indices that define the mesh faces.**** (\[MeshTopology]\(/engine/6000.5/script-reference/unityengine/meshtopology)): The topology of the Mesh, e.g: Triangles, Lines, Quads, Points, etc. See [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md).**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The sub-mesh to modify.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): Calculate the bounding box of the sub-mesh after setting the indices. Unity does this by default. Use false when you want to use the existing bounding box and reduce the CPU cost of setting the indices.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Optional vertex offset that is added to all vertex indices.

### Remarks

A sub-mesh represents a list of triangles (or indices with a different [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md)) that are rendered using a single [Material](/engine/6000.5/script-reference/unityengine/material.md). When the Mesh is used with a [Renderer](/engine/6000.5/script-reference/unityengine/renderer.md) that has multiple materials, you should ensure that there is one sub-mesh per Material.

[Mesh.SetTriangles](/engine/6000.5/script-reference/unityengine/mesh/settriangles.md) and [Mesh.triangles](/engine/6000.5/script-reference/unityengine/mesh/triangles.md) always set the Mesh to be composed of triangle faces. Use SetIndices to create a Mesh composed of lines or points.

The `baseVertex` argument can be used to achieve meshes that are larger than 65536 vertices while using 16 bit index buffers, as long as each sub-mesh index fits within its own 65535 value range. For example, if the index buffer that is passed to SetIndices contains indices 10,11,12 and `baseVertex` is set to 100000, then effectively vertices 100010, 100011 and 100012 will be used for rendering.

Note that meshes use 16-bit [Mesh.indexFormat](/engine/6000.5/script-reference/unityengine/mesh/indexformat.md) by default, i.e. the maximum value supported in the index buffer is 65535 (even when using int\[] input data). In order to use larger index buffer values, you should first set the [Mesh.indexFormat](/engine/6000.5/script-reference/unityengine/mesh/indexformat.md) to [IndexFormat.UInt32](/engine/6000.5/script-reference/unityengine/rendering/indexformat/uint32.md).

Call [Mesh.RecalculateBounds](/engine/6000.5/script-reference/unityengine/mesh/recalculatebounds.md) after updating all sub-meshes if you want to update the [Mesh](/engine/6000.5/script-reference/unityengine/mesh.md)'s bounding box.

Additional Resources: [Mesh.subMeshCount](/engine/6000.5/script-reference/unityengine/mesh/submeshcount.md), [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md), [Mesh.indexFormat](/engine/6000.5/script-reference/unityengine/mesh/indexformat.md).

## SetIndices(List\<ushort>, MeshTopology, int, int, bool, int)

Sets the index buffer for the sub-mesh.

```csharp
public void SetIndices(List<ushort> indices, MeshTopology topology, int submesh, int meshLod, bool calculateBounds = true, int baseVertex = 0)
```

### Parameters

**** (\[List\<ushort>]\(https\://learn.microsoft.com/dotnet/api/system.collections.generic.list-1)): The array of indices that define the mesh faces.**** (\[MeshTopology]\(/engine/6000.5/script-reference/unityengine/meshtopology)): The topology of the Mesh, e.g: Triangles, Lines, Quads, Points, etc. See [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md).**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The sub-mesh to modify.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The Mesh LOD to modify. Use -1 to modify the entire sub-mesh. If not provided, LOD0 is modified.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): Calculate the bounding box of the sub-mesh after setting the indices. Unity does this by default. Use false when you want to use the existing bounding box and reduce the CPU cost of setting the indices.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Optional vertex offset that is added to all vertex indices.

### Remarks

A sub-mesh represents a list of triangles (or indices with a different [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md)) that are rendered using a single [Material](/engine/6000.5/script-reference/unityengine/material.md). When the Mesh is used with a [Renderer](/engine/6000.5/script-reference/unityengine/renderer.md) that has multiple materials, you should ensure that there is one sub-mesh per Material.

[Mesh.SetTriangles](/engine/6000.5/script-reference/unityengine/mesh/settriangles.md) and [Mesh.triangles](/engine/6000.5/script-reference/unityengine/mesh/triangles.md) always set the Mesh to be composed of triangle faces. Use SetIndices to create a Mesh composed of lines or points.

The `baseVertex` argument can be used to achieve meshes that are larger than 65536 vertices while using 16 bit index buffers, as long as each sub-mesh index fits within its own 65535 value range. For example, if the index buffer that is passed to SetIndices contains indices 10,11,12 and `baseVertex` is set to 100000, then effectively vertices 100010, 100011 and 100012 will be used for rendering.

Note that meshes use 16-bit [Mesh.indexFormat](/engine/6000.5/script-reference/unityengine/mesh/indexformat.md) by default, i.e. the maximum value supported in the index buffer is 65535 (even when using int\[] input data). In order to use larger index buffer values, you should first set the [Mesh.indexFormat](/engine/6000.5/script-reference/unityengine/mesh/indexformat.md) to [IndexFormat.UInt32](/engine/6000.5/script-reference/unityengine/rendering/indexformat/uint32.md).

Call [Mesh.RecalculateBounds](/engine/6000.5/script-reference/unityengine/mesh/recalculatebounds.md) after updating all sub-meshes if you want to update the [Mesh](/engine/6000.5/script-reference/unityengine/mesh.md)'s bounding box.

Additional Resources: [Mesh.subMeshCount](/engine/6000.5/script-reference/unityengine/mesh/submeshcount.md), [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md), [Mesh.indexFormat](/engine/6000.5/script-reference/unityengine/mesh/indexformat.md).

## SetIndices(List\<ushort>, int, int, MeshTopology, int, bool, int)

Sets the index buffer of a sub-mesh, using a part of the input array.

```csharp
public void SetIndices(List<ushort> indices, int indicesStart, int indicesLength, MeshTopology topology, int submesh, bool calculateBounds = true, int baseVertex = 0)
```

### Parameters

**** (\[List\<ushort>]\(https\://learn.microsoft.com/dotnet/api/system.collections.generic.list-1)): The array of indices that define the mesh faces.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Index of the first element to take from the input array.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Number of elements to take from the input array.**** (\[MeshTopology]\(/engine/6000.5/script-reference/unityengine/meshtopology)): The topology of the Mesh, e.g: Triangles, Lines, Quads, Points, etc. See [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md).**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The sub-mesh to modify.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): Calculate the bounding box of the sub-mesh after setting the indices. Unity does this by default. Use false when you want to use the existing bounding box and reduce the CPU cost of setting the indices.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Optional vertex offset that is added to all vertex indices.

### Remarks

This method behaves as if you called SetIndices with an array that is a slice of the whole array, starting at `indicesStart` index and being of a given `indicesLength` length. The resulting sub-mesh will have `indicesLength` amount of vertex indices.

## SetIndices(List\<ushort>, int, int, MeshTopology, int, int, bool, int)

Sets the index buffer of a sub-mesh, using a part of the input array.

```csharp
public void SetIndices(List<ushort> indices, int indicesStart, int indicesLength, MeshTopology topology, int submesh, int meshLod, bool calculateBounds = true, int baseVertex = 0)
```

### Parameters

**** (\[List\<ushort>]\(https\://learn.microsoft.com/dotnet/api/system.collections.generic.list-1)): The array of indices that define the mesh faces.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Index of the first element to take from the input array.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Number of elements to take from the input array.**** (\[MeshTopology]\(/engine/6000.5/script-reference/unityengine/meshtopology)): The topology of the Mesh, e.g: Triangles, Lines, Quads, Points, etc. See [MeshTopology](/engine/6000.5/script-reference/unityengine/meshtopology.md).**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The sub-mesh to modify.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Mesh level of detail to modify.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): Calculate the bounding box of the sub-mesh after setting the indices. Unity does this by default. Use false when you want to use the existing bounding box and reduce the CPU cost of setting the indices.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Optional vertex offset that is added to all vertex indices.

### Remarks

This method behaves as if you called SetIndices with an array that is a slice of the whole array, starting at `indicesStart` index and being of a given `indicesLength` length. The resulting sub-mesh will have `indicesLength` amount of vertex indices.
