Legacy Documentation: Version 2018.1 (Go to current version)
  • C#
  • JS

Script language

Select your preferred scripting language. All code snippets will be displayed in this language.


class in UnityEngine


Inherits from:Object


Implemented in:UnityEngine.CoreModule

Suggest a change


Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.


Submission failed

For some reason your suggested change could not be submitted. Please <a>try again</a> in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.



Switch to Manual


A class that allows creating or modifying meshes from scripts.

Meshes contain vertices and multiple triangle arrays. See the Procedural example project for examples of using the mesh interface.

The triangle arrays are simply indices into the vertex arrays; three indices for each triangle.

For every vertex there can be a normal, two texture coordinates, color and tangent. These are optional though and can be removed at will. All vertex information is stored in separate arrays of the same size, so if your mesh has 10 vertices, you would also have 10-size arrays for normals and other attributes.

There are probably 3 things you might want to use the modifyable mesh interface for:

1. Building a mesh from scratch: should always be done in the following order:
a) assign vertices
b) assign triangles.

var newVertices : Vector3[];
var newUV : Vector2[];
var newTriangles : int[];

function Start () { var mesh : Mesh = new Mesh (); GetComponent.<MeshFilter>().mesh = mesh; mesh.vertices = newVertices; mesh.uv = newUV; mesh.triangles = newTriangles; }
no example available in C#

2. Modifying vertex attributes every frame:
a) get vertices
b) modify them
c) assign them back to the mesh.

function Update () {
    var mesh : Mesh = GetComponent.<MeshFilter>().mesh;
    var vertices : Vector3[] = mesh.vertices;
    var normals : Vector3[] = mesh.normals;

for (var i = 0; i < vertices.Length; i++) vertices[i] += normals[i] * Mathf.Sin(Time.time);

mesh.vertices = vertices; }
no example available in C#

3. Continously changing the mesh triangles and vertices:
a) call Clear to start fresh
b) assign vertices and other attributes
c) assign triangle indices.

It is important to call Clear before assigning new vertices or triangles. Unity always checks the supplied triangle indices whether they don't reference out of bounds vertices. Calling Clear then assigning vertices then triangles makes sure you never have out of bounds data.

#pragma strict
var newVertices: Vector3[];
var newUV: Vector2[];
var newTriangles: int[];
function Start() {
	var mesh: Mesh = GetComponent.<MeshFilter>().mesh;
	// Do some calculations...
	mesh.vertices = newVertices;
	mesh.uv = newUV;
	mesh.triangles = newTriangles;
using UnityEngine;

public class ExampleClass : MonoBehaviour { Vector3[] newVertices; Vector2[] newUV; int[] newTriangles;

void Start() { Mesh mesh = GetComponent<MeshFilter>().mesh;


// Do some calculations... mesh.vertices = newVertices; mesh.uv = newUV; mesh.triangles = newTriangles; } }


bindposesThe bind poses. The bind pose at each index refers to the bone with the same index.
blendShapeCountReturns BlendShape count on this mesh.
boneWeightsThe bone weights of each vertex.
boundsThe bounding volume of the mesh.
colorsVertex colors of the Mesh.
colors32Vertex colors of the Mesh.
indexFormatFormat of the mesh index buffer data.
isReadableReturns true if the Mesh is read/write enabled, or false if it is not.
normalsThe normals of the Mesh.
subMeshCountThe number of sub-meshes inside the Mesh object.
tangentsThe tangents of the Mesh.
trianglesAn array containing all triangles in the Mesh.
uvThe base texture coordinates of the Mesh.
uv2The second texture coordinate set of the mesh, if present.
uv3The third texture coordinate set of the mesh, if present.
uv4The fourth texture coordinate set of the mesh, if present.
vertexBufferCountGets the number of vertex buffers present in the Mesh. (Read Only)
vertexCountReturns the number of vertices in the Mesh (Read Only).
verticesReturns a copy of the vertex positions or assigns a new vertex positions array.


MeshCreates an empty Mesh.

Public Methods

AddBlendShapeFrameAdds a new blend shape frame.
ClearClears all vertex data and all triangle indices.
ClearBlendShapesClears all blend shapes from Mesh.
CombineMeshesCombines several Meshes into this Mesh.
GetBaseVertexGets the base vertex index of the given sub-mesh.
GetBindposesGets the bind poses for this instance.
GetBlendShapeFrameCountReturns the frame count for a blend shape.
GetBlendShapeFrameVerticesRetreives deltaVertices, deltaNormals and deltaTangents of a blend shape frame.
GetBlendShapeFrameWeightReturns the weight of a blend shape frame.
GetBlendShapeIndexReturns index of BlendShape by given name.
GetBlendShapeNameReturns name of BlendShape by given index.
GetBoneWeightsGets the bone weights for this instance.
GetColorsGets the vertex colors for this instance.
GetIndexCountGets the index count of the given sub-mesh.
GetIndexStartGets the starting index location within the Mesh's index buffer, for the given sub-mesh.
GetIndicesFetches the index list for the specified sub-mesh.
GetNativeIndexBufferPtrRetrieves a native (underlying graphics API) pointer to the index buffer.
GetNativeVertexBufferPtrRetrieves a native (underlying graphics API) pointer to the vertex buffer.
GetNormalsGets the vertex normals for this instance.
GetTangentsGets the tangents for this instance.
GetTopologyGets the topology of a sub-mesh.
GetTrianglesFetches the triangle list for the specified sub-mesh on this object.
GetUVsGets the UVs of the Mesh.
GetVerticesGets the vertex positions for this instance.
MarkDynamicOptimize mesh for frequent updates.
RecalculateBoundsRecalculate the bounding volume of the Mesh from the vertices.
RecalculateNormalsRecalculates the normals of the Mesh from the triangles and vertices.
RecalculateTangentsRecalculates the tangents of the Mesh from the normals and texture coordinates.
SetColorsVertex colors of the Mesh.
SetIndicesSets the index buffer for the sub-mesh.
SetNormalsSet the normals of the Mesh.
SetTangentsSet the tangents of the Mesh.
SetTrianglesSets the triangle list for the sub-mesh.
SetUVsSets the UVs of the Mesh.
SetVerticesAssigns a new vertex positions array.
UploadMeshDataUpload previously done Mesh modifications to the graphics API.

Inherited Members


hideFlagsShould the object be hidden, saved with the scene or modifiable by the user?
nameThe name of the object.

Public Methods

GetInstanceIDReturns the instance id of the object.
ToStringReturns the name of the GameObject.

Static Methods

DestroyRemoves a gameobject, component or asset.
DestroyImmediateDestroys the object obj immediately. You are strongly recommended to use Destroy instead.
DontDestroyOnLoadMakes the object target not be destroyed automatically when loading a new scene.
FindObjectOfTypeReturns the first active loaded object of Type type.
FindObjectsOfTypeReturns a list of all active loaded objects of Type type.
InstantiateClones the object original and returns the clone.


boolDoes the object exist?
operator !=Compares if two objects refer to a different object.
operator ==Compares two object references to see if they refer to the same object.

Did you find this page useful? Please give it a rating: