Legacy Documentation: Version 4.6.2
Language: English
  • C#
  • JS
  • Boo

Script language

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

Mesh

Namespace: UnityEngine

/

Inherits from: Object

Suggest a change

Success!

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.

Close

Sumbission failed

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

Close

Cancel

Description

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: 1) assign vertices 2) 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; }
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    public Vector3[] newVertices;
    public Vector2[] newUV;
    public int[] newTriangles;
    void Start() {
        Mesh mesh = new Mesh();
        GetComponent<MeshFilter>().mesh = mesh;
        mesh.vertices = newVertices;
        mesh.uv = newUV;
        mesh.triangles = newTriangles;
    }
}
import UnityEngine
import System.Collections

public class ExampleClass(MonoBehaviour):

	public newVertices as (Vector3)

	public newUV as (Vector2)

	public newTriangles as (int)

	def Start() as void:
		mesh as Mesh = Mesh()
		GetComponent[of MeshFilter]().mesh = mesh
		mesh.vertices = newVertices
		mesh.uv = newUV
		mesh.triangles = newTriangles

2. Modifying vertex attributes every frame: 1) get vertices, 2) modify them, 3) 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; }
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void Update() {
        Mesh mesh = GetComponent<MeshFilter>().mesh;
        Vector3[] vertices = mesh.vertices;
        Vector3[] normals = mesh.normals;
        int i = 0;
        while (i < vertices.Length) {
            vertices[i] += normals[i] * Mathf.Sin(Time.time);
            i++;
        }
        mesh.vertices = vertices;
    }
}
import UnityEngine
import System.Collections

public class ExampleClass(MonoBehaviour):

	def Update() as void:
		mesh as Mesh = GetComponent[of MeshFilter]().mesh
		vertices as (Vector3) = mesh.vertices
		normals as (Vector3) = mesh.normals
		i as int = 0
		while i < vertices.Length:
			vertices[i] += (normals[i] * Mathf.Sin(Time.time))
			i++
		mesh.vertices = vertices

3. Continously changing the mesh triangles and vertices: 1) call Clear to start fresh, 2) assign vertices and other attributes, 3) 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.

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

function Update () { var mesh : Mesh = GetComponent(MeshFilter).mesh;

mesh.Clear(); // Do some calculations... mesh.vertices = newVertices; mesh.uv = newUV; mesh.triangles = newTriangles; }
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    public Vector3[] newVertices;
    public Vector2[] newUV;
    public int[] newTriangles;
    void Update() {
        Mesh mesh = GetComponent<MeshFilter>().mesh;
        mesh.Clear();
        mesh.vertices = newVertices;
        mesh.uv = newUV;
        mesh.triangles = newTriangles;
    }
}
import UnityEngine
import System.Collections

public class ExampleClass(MonoBehaviour):

	public newVertices as (Vector3)

	public newUV as (Vector2)

	public newTriangles as (int)

	def Update() as void:
		mesh as Mesh = GetComponent[of MeshFilter]().mesh
		mesh.Clear()
		mesh.vertices = newVertices
		mesh.uv = newUV
		mesh.triangles = newTriangles

Variables

bindposes The bind poses. The bind pose at each index refers to the bone with the same index.
blendShapeCount Returns BlendShape count on this mesh.
boneWeights The bone weights of each vertex.
bounds The bounding volume of the mesh.
colors Vertex colors of the mesh.
colors32 Vertex colors of the mesh.
isReadable Returns state of the Read/Write Enabled checkbox when model was imported.
normals The normals of the mesh.
subMeshCount The number of submeshes. Every material has a separate triangle list.
tangents The tangents of the mesh.
triangles An array containing all triangles in the mesh.
uv The base texture coordinates of the mesh.
uv2 The second texture coordinate set of the mesh, if present.
vertexCount Returns the number of vertices in the mesh (Read Only).
vertices Returns a copy of the vertex positions or assigns a new vertex positions array.

Constructors

Mesh Creates an empty mesh.

Functions

Clear Clears all vertex data and all triangle indices.
CombineMeshes Combines several meshes into this mesh.
GetBlendShapeName Returns name of BlendShape by given index.
GetIndices Returns the index buffer for the submesh.
GetTopology Gets the topology of a submesh.
GetTriangles Returns the triangle list for the submesh.
MarkDynamic Optimize mesh for frequent updates.
Optimize Optimizes the mesh for display.
RecalculateBounds Recalculate the bounding volume of the mesh from the vertices.
RecalculateNormals Recalculates the normals of the mesh from the triangles and vertices.
SetIndices Sets the index buffer for the submesh.
SetTriangles Sets the triangle list for the submesh.

Inherited members

Variables

hideFlags Should the object be hidden, saved with the scene or modifiable by the user?
name The name of the object.

Functions

GetInstanceID Returns the instance id of the object.
ToString Returns the name of the game object.

Static Functions

Destroy Removes a gameobject, component or asset.
DestroyImmediate Destroys the object obj immediately. You are strongly recommended to use Destroy instead.
DontDestroyOnLoad Makes the object target not be destroyed automatically when loading a new scene.
FindObjectOfType Returns the first active loaded object of Type type.
FindObjectsOfType Returns a list of all active loaded objects of Type type.
Instantiate Clones the object original and returns the clone.

Operators

bool Does the object exist?
operator != Compares if two objects refer to a different object.
operator == Compares if two objects refer to the same.