Version: 2020.1

# Mesh

class in UnityEngine

/

## 描述

Meshes contain vertices and multiple triangle arrays.

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.

1.从头开始构建网格： 应始终按以下顺序进行：
a) 分配 vertices
b) 分配 triangles

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

2.每一帧都修改顶点属性
a) 获取顶点
b) 修改它们
c) 将它们分配回网格。

```using UnityEngine;public class Example : MonoBehaviour
{
void Update()
{
Mesh mesh = GetComponent<MeshFilter>().mesh;
Vector3[] vertices = mesh.vertices;
Vector3[] normals = mesh.normals;       for (var i = 0; i < vertices.Length; i++)
{
vertices[i] += normals[i] * Mathf.Sin(Time.time);
}       mesh.vertices = vertices;
}
}
```

3.连续更改网格三角形和顶点
a) 调用 Clear 以开始刷新
b) 分配顶点和其他属性
c) 分配三角形索引。

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.

```using UnityEngine;public class ExampleClass : MonoBehaviour
{
Vector3[] newVertices;
Vector2[] newUV;
int[] newTriangles;   void Start()
{
Mesh mesh = GetComponent<MeshFilter>().mesh;       mesh.Clear();       // Do some calculations...
mesh.vertices = newVertices;
mesh.uv = newUV;
mesh.triangles = newTriangles;
}
}
```

## 变量

 bindposes 绑定姿势。每个索引处的绑定姿势引用索引相同的骨骼。 blendShapeCount 返回此网格上的 BlendShape 计数。 boneWeights 网格中每个顶点的骨骼权重，最大值为 4。 bounds 网格的包围体。 colors 网格的顶点颜色。 colors32 网格的顶点颜色。 indexFormat 网格索引缓冲区数据的格式。 isReadable 如果网格支持读/写，则返回 true，否则返回 false。 normals 网格的法线。 subMeshCount Mesh 对象中的子网格数。 tangents 网格的切线。 triangles 包含网格中所有三角形的数组。 uv 网格的基础纹理坐标。 uv2 网格的第二个纹理坐标集（如果存在）。 uv3 网格的第三个纹理坐标集（如果存在）。 uv4 网格的第四个纹理坐标集（如果存在）。 uv5 网格的第五个纹理坐标集（如果存在）。 uv6 网格的第六个纹理坐标集（如果存在）。 uv7 网格的第七个纹理坐标集（如果存在）。 uv8 网格的第八个纹理坐标集（如果存在）。 vertexAttributeCount 返回网格所具有的顶点属性数。（只读） vertexBufferCount 获取网格中存在的顶点缓冲区数。（只读） vertexCount 返回网格中的顶点数（只读）。 vertices 返回顶点位置的副本或分配新顶点位置数组。

## 构造函数

 Mesh 创建空网格。

## 公共函数

 AddBlendShapeFrame 添加新的混合形状帧。 Clear 清除所有顶点数据和所有三角形索引。 ClearBlendShapes 从网格中清除所有混合形状。 CombineMeshes 将多个网格合并到此网格中。 GetAllBoneWeights 获取网格的骨骼权重。 GetBaseVertex 获取给定 sub-mesh 的基顶点索引。 GetBindposes 获取网格的绑定姿势。 GetBlendShapeFrameCount 返回混合形状的帧计数。 GetBlendShapeFrameVertices 检索混合形状帧的 deltaNormals、deltaNormals 和 /deltaTangents/。 GetBlendShapeFrameWeight 返回混合形状帧的权重。 GetBlendShapeIndex 按给定名称返回 BlendShape 的索引。 GetBlendShapeName 按给定索引返回 BlendShape 的名称。 GetBonesPerVertex 每个顶点的非零骨骼权重数量。 GetBoneWeights 获取网格的骨骼权重。 GetColors 获取网格的顶点颜色。 GetIndexCount 获取给定 sub-mesh 的索引计数。 GetIndexStart 对于给定 /sub-mesh/，获取网格索引缓冲区中的起始索引位置。 GetIndices 获取指定子网格的索引列表。 GetNativeIndexBufferPtr 检索指向索引缓冲区的原生（底层图形 API）指针。 GetNativeVertexBufferPtr 检索指向顶点缓冲区的原生（底层图形 API）指针。 GetNormals 获取网格的顶点法线。 GetSubMesh 获取有关网格的子网格的信息。 GetTangents 获取网格的切线。 GetTopology 获取子网格的拓扑。 GetTriangles 获取此对象上指定子网格的切线列表。 GetUVDistributionMetric UV 分布指标可用于根据摄像机的位置计算所需的 Mipmap 级别。 GetUVs 获取网格的 UV。 GetVertexAttribute 基于索引返回有关顶点属性的信息。 GetVertexAttributeDimension 获取此网格上特定顶点数据属性的尺寸。 GetVertexAttributeFormat 获取此网格上特定顶点数据属性的格式。 GetVertexAttributes 获取有关网格的顶点属性的信息。 GetVertices 获取网格的顶点位置。 HasVertexAttribute 检查特定顶点数据属性是否在此网格上存在。 MarkDynamic 优化网格以便频繁更新。 MarkModified 向 Renderer 组件通知网格几何体更改。 Optimize 优化网格数据以提高渲染性能。 OptimizeIndexBuffers 优化网格几何体以提高渲染性能。 OptimizeReorderVertexBuffer 优化网格顶点以提高渲染性能。 RecalculateBounds 从顶点重新计算网格的包围体。 RecalculateNormals 从三角形和顶点重新计算网格的法线。 RecalculateTangents 从法线和纹理坐标重新计算网格的切线。 SetBoneWeights 设置网格的骨骼权重。 SetColors 设置网格的每顶点颜色。 SetIndexBufferData 设置网格索引缓冲区的数据。 SetIndexBufferParams 设置索引缓冲区大小和格式。 SetIndices 为子网格设置索引缓冲区。 SetNormals 设置网格的法线。 SetSubMesh 设置有关网格的子网格的信息。 SetTangents 设置网格的切线。 SetTriangles 为子网格设置三角形列表。 SetUVs 设置网格的 UV。 SetVertexBufferData 设置网格顶点缓冲区的数据。 SetVertexBufferParams 设置顶点缓冲区大小和布局。 SetVertices 分配新的顶点位置数组。 UploadMeshData 将以前进行的网格修改上传到图形 API。

## 静态函数

 AcquireReadOnlyMeshData Gets a snapshot of Mesh data for read-only access. AllocateWritableMeshData Allocates data structures for Mesh creation using C# Jobs. ApplyAndDisposeWritableMeshData Applies data defined in MeshData structs to Mesh objects.

## 变量

 hideFlags 该对象应该隐藏、随场景一起保存还是由用户修改？ name 对象的名称。

## 公共函数

 GetInstanceID 返回对象的实例 ID。 ToString 返回对象的名称。

## 静态函数

 Destroy 移除 GameObject、组件或资源。 DestroyImmediate 立即销毁对象 /obj/。强烈建议您改用 Destroy。 DontDestroyOnLoad 在加载新的 Scene 时，请勿销毁 Object。 FindObjectOfType 返回第一个类型为 type 的已加载的激活对象。 FindObjectsOfType Gets a list of all loaded objects of Type type. Instantiate 克隆 original 对象并返回克隆对象。

## 运算符

 bool 该对象是否存在？ operator != 比较两个对象是否引用不同的对象。 operator == 比较两个对象引用，判断它们是否引用同一个对象。